2

我有片面的看法。它的模型是 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

提前致谢!

4

3 回答 3

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',

然后,您将发布用户输入的值。

于 2013-05-13T18:23:04.527 回答
0

我们知道 .BeginForm() 扩展方法将创建一个表单标签,从而将表单级别的方法与页面相关联。我一直想知道 MVC3 中 Html.BeginForm() 和 Ajax.BeginForm() 方法之间到底有什么区别。看了很多博客,大家只说一件事,Ajax表单中,表单是使用Javascript异步提交的。所以,这篇文章是为了验证同样的事情。 http://www.codeproject.com/Articles/429164/Html-BeginForm-vs-Ajax-BeginForm-in-MVC3

于 2013-05-15T06:44:26.403 回答
0

安装 Fiddler ( http://fiddler2.com/get-fiddler ) 并查看单击提交按钮时是否有请求。如果不是,那么您有客户端问题,例如您的提交按钮不在您的 using BeginForm 语句中。

如果正在发出请求,那么您需要查看您的控制器操作路线以及它是否正确。还要确保您的操作使用 HttpPost 属性进行修饰,并且它接受正确的模型参数。您可以在这里发布您的控制器操作代码吗?

无论如何,Fiddler 是你最好的朋友,它会告诉你哪里出了问题以及在哪里......

于 2013-05-13T17:22:31.587 回答