在MVC视图中,如果在表单标记中没有指定,则调用哪个控制器和方法?

boi*_*222 4 asp.net-mvc html-helper razor asp.net-mvc-4

我有一个继承的MVC项目.在视图上,BeginForm标记中没有指定路由(控制器和操作).视图呈现正确,因此我假设它正在选择默认路由.

我的问题是,如果没有指定路线,它是如何知道使用的路线?这里的最佳做法是:您是指定路线还是让它默认?

所以视图是Views/Config/WorkCodes.cshtml,标签是

Html.BeginForm()
Run Code Online (Sandbox Code Playgroud)

它进入控制器ConfigController.cs并调用操作WorkCodes().如果我正在做这个项目,我会写的

Html.BeginForm("WorkCodes", "Config", FormMethod.Post)
Run Code Online (Sandbox Code Playgroud)

MVC如何知道使用哪个控制器和操作而不指定它?

WorkCodes.cshtml

@{
  ViewBag.Title = "Work Codes";
}

@using (Html.BeginForm())
{
<div>
    <table style="width: 100%;" class="trHoverHighlight">
        <tbody>
            <tr>
                <td>
                    <br />
                    <div>
                        <button id="buttonCreateNew" type="button">Add New</button>&nbsp;
                        <button id="buttonReturn" type="button">Return</button>
                    </div>

                </td>
            </tr>
        </tbody>
    </table>
</div>
Run Code Online (Sandbox Code Playgroud)

}

ConfigController.cs

    public ActionResult WorkCodes()
    {
        return View(Rep.GetWorkAll(true));
    }
Run Code Online (Sandbox Code Playgroud)

这是从另一个视图中调用视图的位置:

                @foreach (var itm in (List<string>)ViewBag.ListObjects)
                {
                        <li>
                            <a href="../Config/@itm">Work Codes</a>
                        </li>  
                }
Run Code Online (Sandbox Code Playgroud)

Kon*_*nev 5

View是从执行HTTP GETWorkCodes控制器操作生成的,因此默认情况下,在该视图中生成的表单执行HTTP POST具有相同名称的控制器操作.

这是MSDN文档.

BeginForm(HtmlHelper)将一个开始标记写入响应.表单使用POST方法,请求由视图的操作方法处理.

  • 不指定值意味着代码更少,意味着在为动作和控制器名称键入魔术字符串时不能输入错误 (3认同)