我正在使用ASP.NET MVC5而且我不知道处理这类情况的最佳做法是什么:
让我们想象一个带有地图的网页。当用户单击按钮时,地图的边界将发送到服务器端操作
public ActionResult MyAction(MapBoundsModel model)
{
//some stuff
}
此处,MapBoundsModel
是一个包含地图边界的对象,但是使用Javascript构建
所以这就是我所做的:
//Create a JS object which is similar to my server-side model
var myObject = new Object();
myObject.Center = myMap.getCenter();
//and all the opther properties of the server-side object
//Call my server-side action with an Ajax call
$.ajax({
url: '@Url.Action("MyAction", "MyController")',
type: 'POST',
dataType: "json",
contentType: 'application/json',
data: JSON.stringify({ mapBoundsModel : myObject})
})
我的服务器端控制器看起来像那样
public ActionResult MyAction(MapBoundsModel mapBoundsModel)
{
//doWork
}
这有效,但对我来说似乎很难看,因为如果我通过添加或删除属性来更改我的MapBoundsModel
,JS对象将没有new / removed属性,这将在运行时产生意外结果(VS会让我编译它)
我想人们可以通过大量隐藏的字段进入强类型视图,但对我来说这看起来并不干净。
那么,有没有最好的做法来传递"副本"来自JS的复杂服务器端模型? 我打开一个暗示任何VS插件存在的解决方案