我正在开发MVC 5中的Web应用程序 - 也使用带有Kendo UI Grid的Web API来显示数据。加载汽车数据网格时,它基于将在模型上设置的客户ID。
Kendo UI Grid的标记位于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 Grid代码如下所示。我还在CustId
的局部视图中设置了一个@ Html.HiddenFor@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>
所以在我的Document.Ready中加载Partial视图的页面上我有一个getCustId的js函数 - 它如下所示:
function GetCustId() {
alert('@Model.CustId');
return { custId: '@Model.CustId' };
}
警告它返回空白然后如果我在webapi控制器中的我的GetDetails方法上断断点,则custId字段为空 - 如果我在我的js函数中将其硬编码为某个值,它会被传递正常但是我的方法有些不正确将它连接起来以从模型中获取价值?
更新
Web 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文件更新为路径中的inlucde {action},如下所示:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
答案 0 :(得分:0)
当模型已绑定到视图时,不确定为什么需要隐藏字段或js。你应该能够:
.Read(read => read.Url("api/Car/GetDetails").Type(HttpVerbs.Get).Data((string)model.CustId ))