繁体   English   中英

剃刀形式ASP.NET中的Html.BeginForm()

[英]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/UpdateSettingsform标签的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM