问题是表单提交事件已触发,但相关操作未被调用。我是否必须在表单的提交事件中提及操作名称,还是自动计算?
下面你可以看到代码。
我正在制作一个这样的表格
@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");
}
答案 0 :(得分:1)
操作名称由处理请求的路由指定。如果您尚未指定任何路线,则您将使用以/Controller/Action
形式捕获网址的默认路线。
由于您未在BeginForm
方法中指定任何操作和控制器,因此它将使用与当前页面相同的操作和控制器。您可以在浏览器中使用“查看来源”来检查生成的form
代码是否在action
属性中包含正确的网址。
如果页面是/Meals/UpdateSettings
,那么form
标记action
属性将是相同的,因此页面将使用POST http方法发回相同的地址而不是GET。
对于该网址,将使用UpdateSettings
控制器中的MealsController
操作。
答案 1 :(得分:0)
我是否必须在表单的submit事件中提及操作名称 还是会自动计算出来?
如果HttpPost
操作名称与HttpGet
操作名称相同,则不必指定。如果您有不同的操作名称,则必须按如下方式指定:
Html.BeginForm(string ActionName, string ControllerName)
如果您需要指定其他详细信息(路由值,方法,html属性等等),您还可以使用其他13个定义。