Соглашение об именовании частичного представления ASP.NET MVC3
Я новичок в разработке MVC, поэтому, пожалуйста, несите меня. Действительно ли нужно называть мое частичное представление, например _Action.cshtml
(с подчеркиванием _
), чтобы соблюдать соглашение об именах?
Вот моя проблема: у меня есть контроллер (StudentController) и действие (List), у которого есть файл с частичным представлением с именем "List.cshtml" и
@{ Html.RenderAction("List", "Student"); }
чтобы отобразить это внутри моего HomeController - Index view как частичное представление, которое работает. Но если я называю свое частичное представление _List.cshtml
, конечно, это не сработает. Visual Studio не смогла даже найти представление для моего действия Student-List, потому что оно думает, что оно все еще ищет то же имя, что и мое действие (List.cshtml)
. Что мне делать?
Я так привык к ASP.NET ascx с кодом ascx.cs.: (
Ответы
Ответ 1
Нет необходимости использовать символ подчеркивания, но это общее соглашение для файлов, которые не предназначены для обслуживания напрямую.
Чтобы решить эту проблему, у вас есть возможность вернуть View или PartialView с именем представления в качестве параметра.
return View("_List");
или
return PartialView("_List");
или внутри другого представления
@{ Html.RenderPartial("_List"); }
Ответ 2
Если частичное представление зависит от ActionMethod и всегда отображается методом Action, вы должны использовать то же имя частичного представления, что и метод действия, например
public PartialViewResult List()
{
DoSomthing();
//PartialView() return a "List "Parial View
return PartialView();
}
но если ваше частичное представление не зависит от метода действия и напрямую вызывается представлением, как это
@Html.RenderPartial("_List");
Ответ 3
Во-первых, не стыдно быть новичком на любой платформе. И это было восемь лет назад, так что вы, вероятно, больше не новичок. Вы можете использовать любые соглашения об именах, которые вы хотите использовать. Я согласен с оригинальным соглашением об именах MVC, в котором подчеркивания (_) используются только для общих представлений. Частичные взгляды должны быть названы в честь их действий. В вашем случае имя представления будет Action.cshtml, если, конечно, это не общее представление.
Мои рассуждения просты. Если вы вызываете View или PartialView из действия и не предоставляете viewName, предполагается, что имя представления является именем действия. Также _Layout.cshtml назван с подчеркиванием. Это потому, что оно является общим, а не потому, что это частичное представление. Эта ошибка повсюду в мире MVC. Люди действительно ревностно ошибаются в этом. Не знаю почему. Соглашение об именовании - усмотрение магазина.
Вспомогательные методы Html.RenderAction
и Html.Action
вызывают действия на контроллере. Вспомогательные методы Html.RenderPartial
и Html.Partial
позволяют передавать модель непосредственно в представление Razor, не пропуская действие.
И последнее: вызовите Action
вместо RenderAction
. RenderAction
вызывается, только если вы уже находитесь внутри блока кода. Это почти никогда не бывает. Я вижу людей, использующих RenderAction
а затем добавляющих кодовый блок вокруг него без необходимости только потому, что сборка не работает. Эти два следующих фрагмента кода абсолютно одинаковы, а второй, на мой взгляд, более читабелен. Я поместил div
чтобы подчеркнуть, что код не находится в блоке кода:
<div>
@{ Html.RenderAction("List", "Student"); }
</div>
<div>
@Html.Action("List", "Student")
</div>
Суть в том, чтобы не использовать подчеркивания или фигурные скобки без необходимости. Это уродливые персонажи, и мы должны избегать их. ;)