#c# #javascript #asp.net-mvc #kendo-ui #asp.net-mvc-5
#c# #javascript #asp.net-mvc #kendo-пользовательский интерфейс #asp.net-mvc-5
Вопрос:
Я разрабатываю веб-приложение на MVC 5, также используя веб-API с сеткой пользовательского интерфейса Kendo для отображения данных. При загрузке сетки данных автомобиля она основана на идентификаторе клиента, который будет установлен для модели.
Разметка для сетки пользовательского интерфейса Kendo находится в Partial_View.
Итак, в моем контроллере MVC у меня есть что-то вроде приведенного ниже:
model.CustId = "12345"; //just hard coded - will possibly come from query string or set somewhere else
return PartialView(_CarDetails, model);
В моем частичном представлении _CarDetails код сетки Kendo выглядит следующим образом. Я также установил @Html.HiddenFor в частичном представлении для CustID
@Html.HiddenFor(model => model.CustId)
//other setting up off Kendo UI Grid removed for Brevity
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Url("api/Car/GetDetails").Type(HttpVerbs.Get).Data("GetCustId"))
)
)
</div>
Итак, на странице, которая загружает частичное представление в моем документе.Готово, у меня есть функция js, которая GetCustId — это как показано ниже:
function GetCustId() {
alert('@Model.CustId');
return { custId: '@Model.CustId' };
}
оповещение возвращает пустое значение, а затем, если я установлю точку останова в своем методе getDetails в контроллере webapi, поле CustID равно нулю — если я жестко закодирую это для некоторого значения в моей функции js, оно будет передано нормально, но есть ли что-то неправильное в том, как я подключил его для получения значения из модели?
Обновить
Сигнатура метода веб-API выглядит следующим образом:
public DataSourceResult GetDetails([ModelBinder(typeof(ModelBinders.DataSourceRequestModelBinder))] DataSourceRequest request, string custId)
{
//this is another method in web api controller that calls services to get details and then maps the responses to View Model
return GetCarDetailsByCustId(custId).ToDataSourceResult(request);
}
Обратите внимание, что я также обновил файл WebApiConfig.cs, добавив {action} в путь, как показано ниже:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Комментарии:
1. Какова сигнатура действия в вашем контроллере для этого?
2. @DavidShorthose — обновил вопрос, чтобы включить это
3. Опубликуйте разметку, в которой вы добавляете частичный вид в свой основной вид
4. Что произойдет, если вы получите доступ к скрытому значению через jquery, вместо того, чтобы устанавливать значение из модели? Например, $(«#CustID»).val() в вашем скрипте
5. Обычно я бы устанавливал значения именно так. Рад, что теперь у вас все работает.
Ответ №1:
Не уверен, зачем вам нужно скрытое поле или js, когда модель уже привязана к представлению. Вы должны быть в состоянии просто:
.Read(read => read.Url("api/Car/GetDetails").Type(HttpVerbs.Get).Data((string)model.CustId ))