Подтвердить что ты не робот

Соглашение об именовании частичного представления 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.: (

4b9b3361

Ответ 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>

Суть в том, чтобы не использовать подчеркивания или фигурные скобки без необходимости. Это уродливые персонажи, и мы должны избегать их. ;)