1

我真的很好奇。是否可以让 jQuery Ajax 发布操作将整个表单数据(序列化与否)发送到 MVC 4 方法,该方法具有与表单输入 ID 同名的特定参数,同时排除不匹配的元素?

MVC 4 控制器方法

[HttpPost]
public JsonResult DoWork(string companyName, string firstName, string lastName, string email)
{
    //.. do stuff and return result...
}

HTML

<form id="MyForm" method="post">
    <input id="CompanyName" name="CompanyName" type="text"/>
    <input id="FirstName" name="FirstName" type="text"/>
    <input id="LastName" name="LastName" type="text"/>
    <input id="Email" name="Email" type="text"/>
    <input id="Var1" name="Var1" type="text"/>
    <input id="Var2" name="Var2" type="text"/>
</form>

jQuery 阿贾克斯

$.ajax({
type: 'post',
dataType: 'html',
url: '/Controller/DoWork',
data: $('#MyForm').serialize()
});

如果不可能开箱即用,是否有人有一些基本的想法可以让我研究如何实现这一点?我想让某人“更难”弄清楚我的方法调用,而不给他们提供使方法工作所需的确切参数名称和值。

4

2 回答 2

1

是否可以让 jQuery Ajax 发布操作将整个表单数据(序列化与否)发送到 MVC 4 方法,该方法具有与表单输入 ID 同名的特定参数,同时排除不匹配的元素?

是的,有可能。但是你记得你仍然可以通过Reques对象访问那些发布的数据。您实际上可以删除控制器方法中的所有参数,并且仍然可以向其发布数据。在控制器方法中使用参数的真正好处是参数的类型是否为对象 - 视图模型。具有数据注释的视图模型,因此您可以进行验证。但请注意,这不是必需的,它只是一种技术。

另一件事要注意的是,如果你有类似的东西

public ActionResult DoWork(string first, string last, int id, int? id2) {
}

并且您只传递数据,first并且last您的发布操作将导致异常。异常将出现在id控制器期望接收值的参数上。现在,如果您将值传递给first,lastid参数但忽略id2,则不会发生异常,因为id2会有空值。

因此,您发布的示例将起作用。Var1如果你想得到它们的值,你可以Var2通过做Request["Var1"]and得到 andRequest["Var2"]的值。你当然可以忽略它们。

于 2013-05-09T03:38:14.573 回答
0

呃,我希望你不要使用这里接受的答案作为这样做的方式。这个问题实际上是重复的,这里的答案是做你想做的事情的首选方式: Passing parameters when submit a form via jQuery in ASP.NET MVC

于 2013-08-08T21:16:48.057 回答