![](/img/trans.png)
[英]Posting form without @HTML.Beginform and using Jquery(ajax) in asp.net MVC
[英]Html.BeginForm() in Razor Form ASP.NET
问题在于触发了表单提交事件,但未调用相关操作。 我是否必须在表单的Submit事件中提及动作名称,还是会自动计算出来?
您可以在下面看到代码。
我正在制作这样的表格
@using (Html.BeginForm())
{
<div class="row">
<div class="large-6 columns">
<input type="text" placeholder="Meals per day" id="numOfMealsPerDay" value="@Model.numberOfMeals" />
<input type="hidden" name="myHiddenInput" id="myHiddenInput" value="@Model.Id" />
</div>
</div>
<div class="row">
<div class="large-6 columns">
<button type="submit" class="button small" id="updateNumOfMeals">Submit</button>
</div>
</div>
}
在我的jQuery中,我正在这样做
$('form').submit(function () {
var numOfMealsPerDay = $('#numOfMealsPerDay').val();
console.log("form submitted");
if (numOfMealsPerDay != '' && numOfMealsPerDay > 0) {
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function (result) {
console.log(result);
}
});
} else {
alert('cannot be empty or less than 0');
}
return false;
});
在控制器中,我这样做
[HttpPost]
public ActionResult UpdateSettings()
{
Debug.WriteLine("1");
return Content("Thanks", "text/html");
}
操作名称由处理请求的路由指定。 如果您未指定任何路由,则将使用默认路由,该默认路由以/Controller/Action
形式捕获网址。
由于您没有在BeginForm
方法中指定任何动作和控制器,因此它将使用与当前页面相同的动作和控制器。 您可以在浏览器中使用“查看源代码”来检查所生成的form
标记在action
属性中是否具有正确的URL。
例如,如果页面是/Meals/UpdateSettings
则form
标签的action
属性将是相同的,因此页面将被发布回相同的地址,但使用POST http方法而不是GET。
对于该URL,将使用MealsController
控制器中的UpdateSettings
操作。
我是否必须在表单的Submit事件中提及动作名称,还是会自动计算出来?
如果HttpPost
操作名称与HttpGet
名称相同,则HttpGet
指定它。 如果您使用其他操作名称,则必须像这样指定它:
Html.BeginForm(string ActionName, string ControllerName)
如果需要指定其他详细信息(路由值,方法,html属性等),还可以使用其他13种定义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.