Asp.net mvc ASP.NET MVC 4-从视图更新模型
我正在玩ASP.NETMVC4,但是我在理解上有一些问题。为了更好地解释,我将使用一个简单的“合成”情况。 假设我有一个具有两个属性的模型人:Asp.net mvc ASP.NET MVC 4-从视图更新模型,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,我正在玩ASP.NETMVC4,但是我在理解上有一些问题。为了更好地解释,我将使用一个简单的“合成”情况。 假设我有一个具有两个属性的模型人: 字符串名 人员类型(例如学生、员工、军人等) 比如说,在我的控制器中,我有一个私有财产的人。我可以在索引方法中初始化这个对象,传递到视图中并构建html页面。嗯 现在,当用户在客户端更新person实例的一个字段时(他可以输入新的人名或使用下拉列表选择新的人名类型),我想立即更新我的模型。因此,我的一般问题是如何实现它? 对我来说,显而易见的解决方案
- 字符串名
- 人员类型(例如学生、员工、军人等)
提交
按钮,而是一个普通的按钮
并添加一些JavaScript代码(使用jQuery)序列化表单并执行
只要POST值的键以开箱即用的形式映射到您的模型字段,那么您的操作方法仍然能够接收正确的模型类型。在服务器端,无论是来自AJAX调用还是普通POST,这都无关紧要。然而,区别在于AJAX调用的响应ld可能是JSON格式的,而不是用视图响应
因此,与此相反:
return View(someModel);
您可能会有这样的情况:
return Json(someModel);
让javascript对象来表示您的模型并没有那么脏。事实上,我就是这样做的。我使用KnockoutJS来为我提供一个客户端模型——本质上就是MVVM模式 您正试图以一种您无法使用的方式使用MVC模型。但是,您可以按照自己的意愿使用淘汰模型。您基本上拥有服务器端模型的javascript表示,一旦完成,您就可以将其发送到服务器
为了让您的服务器端方法获取您的客户端模型,您只需确保post请求包含数据,并且只要属性名称在方法的参数中相同,它们就会匹配自己。David,感谢您提供了非常有用的解释!通过“我不想使用任何表单”我的意思是,在我的真实项目中,我不能通过单击按钮从页面收集所有需要的字段。我使用的是动态加载的局部视图,一些字段可以在单击按钮时从页面中删除。因此,我应该使用JavaScript ViewModel来获取始终最新的数据吗?