回复于
MVC3 使用 javascript 将模型视图传递给控制器
暗示这是不可能的,至少对于 MVC 3 而言。
我想知道 MVC 4 中是否有任何方法可以将整个表单内容(由模型表示)从 .cshtml(剃刀)视图快速传递到 JavaScript 中的控制器。
例如,如果我选择一个下拉菜单,我可能希望将表单中的所有字段返回到控制器,控制器将采取适当的措施。
显然,对于大型表单,必须逐个元素地执行此操作是不可取的
回复于
MVC3 使用 javascript 将模型视图传递给控制器
暗示这是不可能的,至少对于 MVC 3 而言。
我想知道 MVC 4 中是否有任何方法可以将整个表单内容(由模型表示)从 .cshtml(剃刀)视图快速传递到 JavaScript 中的控制器。
例如,如果我选择一个下拉菜单,我可能希望将表单中的所有字段返回到控制器,控制器将采取适当的措施。
显然,对于大型表单,必须逐个元素地执行此操作是不可取的
基本上,您可以调用 AJAX POST:
JS(使用 jQuery):
$('form').on('submit', function (event) {
// Stop the default submission
event.preventDefault();
// Serialize (JSON) the form's contents and post it to your action
$.post('YourAction', $(this).serialize(), function (data) {
// If you want to do something after the post
});
});
控制器动作:
public ActionResult YourAction(string JSONmodel)
{
System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
MyModel model = serializer.Deserialize(JSONmodel, typeof(MyModel));
// Now you can do whatever you want with your model
}
更新
对于更复杂的对象,您可以使用第三方解决方案进行序列化/反序列化。它有据可查并被广泛使用:
Json.NET:http://json.codeplex.com/ _ _
是的,有可能以更简单的方式。
MelanciUK 提供的替代示例。
$('form').on('submit', function (event) {
// Stop the default submission
event.preventDefault();
// User same property name as in Model
$.post('YourAction', {prop1 : 'a', prop2 : 'b'}, function (data) {
// If you want to do something after the post
});
});
[HttpPost]
public ActionResult SampleAction(SampleModel sModel)
{
}
您可以通过标准 MVC(ModelBinding) 约定来实现相同的目的,即无需序列化和反序列化。