Razor Form ASP.NET中的Html.BeginForm()

时间:2014-11-26 12:52:51

标签: jquery asp.net-mvc razor

问题是表单提交事件已触发,但相关操作未被调用。我是否必须在表单的提交事件中提及操作名称,还是自动计算?

下面你可以看到代码。

我正在制作一个这样的表格

    @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");
    }

2 个答案:

答案 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个定义。