我有以下选项。
1. 使用带有 AjaxOptions 的 Ajax Begin Form,如下所示
@using (Ajax.BeginForm("ActionName", "ControllerName", new { area = "AreaName" }, new
AjaxOptions
{
HttpMethod = "POST",
OnSuccess = "alert('Success');" //This will execute once the Ajax call is finished.
}, null))
{
<input type="submit" name="nameSubmit" value="Submit" />
}
2. 使用 JQuery 手动设置 XHR 请求
$.ajax({
url: "@Url.Action("ActionName", "ControllerName", new { area = "AreaName" });",
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({param : Value})
})
.done(function () { alert('Success');}) //This will execute when you request is completed.
.fail(function () { })
我的建议
使用 FormCollection 有以下缺点
点 - 1
如果FormCollection
正在使用...这将是不必要的,因为在获取特定索引的条目时,返回Type Cast
的值是类型的。这种情况不会出现在 Strongly Typed 的情况下。Primitive Type
System.Collections.Specialized.NameValueCollection
String
View-Models
问题 - 2
当您提交表单并转到Post
Action Method时,View-Model
由于 Action 方法中存在 Parameter,您可以将 Posted Values 发回给您View
。否则,再次编写代码以发送回TempData/ViewData/ViewBag
点 - 3
我们有可以在View Model
或中实现的数据注释Custom Validations
。
ASP.Net MVC 使用数据注释简化模型验证。数据注释是应用于属性的属性。我们可以通过继承内置的验证属性类来创建自定义验证属性。
点 - 4
示例您有以下HTML
<input type="text" name="textBox1" value="harsha" customAttr1 = "MyValue" />
问题:我们如何从上面访问 customAttr1 的值,例如从控制器内部
答:当一个表单被发布时,只有元素的名称和值被发布回服务器。您还可以使用隐藏字段将属性发布到发布操作方法。
替代方案:使用一些 jQuery 获取自定义属性值,并将其与表单值一起发布到操作方法
另一种选择是将您在自定义属性中获得的内容放在隐藏控件中
这就是原因,我总是更喜欢使用View-Models