我有部分观点。它的Model是Book对象和Customer对象
我尝试使用带有以下内容的输入类型=提交按钮:
@using (Html.BeginForm("GetBooks", "Home", FormMethod.Post, new { id = "formId" }))
{
}
我可以使用var values = $('#formId').serialize();
但是当点击按钮时,控制器不会被调用。
所以,我决定使用jquery ajax()方法,它似乎工作正常,通过调用控制器并传入模型。但是,它不会将更新的模型(使用用户条目更新)发送到控制器。
ajax的例子:
$.ajax({
url: "/Home/GetBooks",
data: JSON.stringify({ model: @Html.Raw(Json.Encode(Model)) }) ,
type: 'POST',
contentType: 'application/json',
beforeSend:function(){
$("#loading").show();
},
success: function(data) {
append(data)
},
error: function (e, textStatus, jqXHR) {
$("#loading").hide();
alert(e.statusText);
},
complete:function(){
$("#loading").hide();
}
});
在调用Ajax方法之前,我需要将用户输入的值重新分配给Book Model,但我不确定如何执行此操作。我将Book和Customer Model传递回控制器,如
所示JSON.stringify({model: @Html.Raw(Json.Encode(Model))})
控制器:
[HttpPost]
public ActionResult GetBooks(ModelObjects model)
{
}
型号:
public class ModelObjects
{
public MVC4App.Models.Customer Customer{ get; set; }
public MVC4App.Models.Book Book{ get; set; }
}
public class Customer
{
public string FirstName{ get; set; }
public string LastName{ get; set; }
}
public class Book
{
public string Name{ get; set; }
}
视图中的模型参考:
@model MVC4App.Models.ModelObjects
提前致谢!
答案 0 :(得分:1)
除了
之外,使用ajax方法所做的几乎是正确的data: JSON.stringify({ model: @Html.Raw(Json.Encode(Model)) })
将导致您继续发布的硬编码json。事情是@Html.Raw(Json.Encode(Model))
将是一个字符串生成的服务器端,在渲染视图时(只需看一下网页的来源)。
所以,改变
url: "/Home/GetBooks",
data: JSON.stringify({ model: @Html.Raw(Json.Encode(Model)) }) ,
type: 'POST',
contentType: 'application/json',
类似于:
url: "/Home/GetBooks",
data: $('#formId').serialize(), // or JSON.stringify($('#formId').serialize())
type: 'POST',
contentType: 'application/json',
然后您将发布用户输入的值。
答案 1 :(得分:0)
安装Fiddler(http://fiddler2.com/get-fiddler)并查看单击提交按钮时是否有请求。如果没有那么你有一个客户端问题,例如你的提交按钮不在你使用的BeginForm语句之外。
如果正在提出请求,那么您需要查看控制器操作路由以及是否正确。还要确保您的操作使用HttpPost属性进行修饰,并且它接受正确的模型参数。你能在这里发布控制器动作代码吗?
无论如何,Fiddler是你最好的朋友,它会告诉你什么是失败的,在哪里......
答案 2 :(得分:0)
我们知道.BeginForm()扩展方法将创建一个表单标记,从而将表单级方法与页面相关联。我一直想知道MVC3中Html.BeginForm()和Ajax.BeginForm()方法之间究竟有什么区别。阅读许多博客,每个人只说一件事,在Ajax表单中,表单是使用Javascript异步提交的。所以,这篇文章是为了验证同样的事情。 http://www.codeproject.com/Articles/429164/Html-BeginForm-vs-Ajax-BeginForm-in-MVC3