2015-06-09 3 views
4

У меня есть проект MVC, который я унаследовал. В представлениях нет маршрута (контроллера и действия), указанного в теге BeginForm. Представление отображается правильно, поэтому я предполагаю, что он выбирает маршрут по умолчанию.В представлении MVC какой контроллер и метод вызывается, если в теге формы не указано ни одного?

Мой вопрос в том, как он знает, какой маршрут использовать, если он не указан? Что лучше всего здесь: следует ли указать маршрут или оставить его по умолчанию?

Таким образом, точка зрения Views/Config/WorkCodes.cshtml и тег

Html.BeginForm() 

Он идет к ConfigController.cs контроллера и вызывает WorkCodes действий(). Если бы я выполнял проект, я бы написал

Html.BeginForm("WorkCodes", "Config", FormMethod.Post) 

Как 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> 

}

ConfigController.cs

public ActionResult WorkCodes() 
    { 
     return View(Rep.GetWorkAll(true)); 
    } 

Вот где вид вызывается в другой точке зрения:

   @foreach (var itm in (List<string>)ViewBag.ListObjects) 
       { 
         <li> 
          <a href="../Config/@itm">Work Codes</a> 
         </li> 
       } 
+0

по умолчанию '' FormMethod' является FormMethod.Post' и имена контроллера и действия по умолчанию являются те, которые сгенерированные вид (из метода GET) –

+0

[Это в документации] (https: // MSDN. microsoft.com/en-us/library/dd505244(v=vs.118).aspx). – vcsjones

ответ

5

Зрения генерируемый fr om выполняет HTTP GET в действие контроллера WorkCodes, поэтому по умолчанию форма, сгенерированная в этом представлении, выполняет HTTP POST для действия контроллера с тем же именем.

Here's the MSDN docs.

BeginForm (HtmlHelper) Записывает открывающий тег в ответ. Форма использует метод POST, и запрос обрабатывается методом действия для представления.

+0

Итак, что лучше для этого? Указание маршрута или отсутствие указания маршрута? – boilers222

+3

Не указывая значения означает меньше кода и означает, что вы не можете сделать опечатку при вводе магических строк для имени действия и контроллера –

+0

Обычно люди не указывают его, если вы не маршрутизируете где-то, кроме местоположения по умолчанию (The Controller \ Action), который уже сопоставлен с представлением. Иногда вам может потребоваться маршрут к другому контроллеру/действию на данном посту, и в этот момент было бы целесообразно добавить маршрут конкретно. – davidallyoung

Смежные вопросы