2010-01-21 2 views
0

я вижу соглашение, чтобы иметь пост действие будет совпадать с именем страницы, но поставить:конвенции для почтовых действий в ASP.NET MVC

[AcceptsVerb.HTTPVerbs.Post] 

на методе действия.

Есть ли что-то неправильное с тем, чтобы постученное действие было другим именем.

Так что, если у меня есть страница с названием «Редактировать», действие «Редактировать» отобразит эту страницу, а действие «Обновить» опубликует изменения. Это кажется мне более ясным по сравнению с тем, что у меня есть Edit «Get», а Edit «Post»

хотел, чтобы люди думали об этом, если это чисто конвенциональная вещь или здесь есть право и не так?

ответ

1

Я считаю, что это чисто конвенция, и нет ничего плохого в том, что у вас есть разные имена постов.

По умолчанию MVC должен возвращать представление с тем же именем, что и действие, и предполагается, что вы захотите вернуть тот же вид, независимо от того, получаете ли вы или публикуете.
Кроме того, изменение имени действия обычно изменяет URL-адрес, но если вас это не волнует, переходите к гайкам с вашими именами действий.
Я использовал комбинации имен/целей действий, в зависимости от того, что, казалось, имело смысл в то время.

0

По моему мнению, не имеет значения, как вы называете свои действия, но оно должно быть последовательным в вашем сайте/приложении. Я думаю, что если вы используете REST в качестве API для своего приложения, хотелось бы иметь такие действия, как /system/accounts/user/34/addNote/, а не обновлять весь пользователь или иметь другой контроллер для заметок.

+1

REST будет POST для '/ system/accounts/user/34/notes' вместо определения ваших собственных глаголов в URL. –

+0

Jepp, вы правы, 'addNote' - это плохое имя в моем комментарии выше.Но я до сих пор недоработан, если он не должен быть назван '/ system/accounts/user/34/notes/[index] | create | edit' после соглашения REST, который тогда был бы субконтроллером' Notes' для ' Пользовательский контроллер? –

0

Если вы не создаете приложение RESTfull, это не имеет большого значения до тех пор, пока ваше соглашение об именах будет единообразным во всем приложении.

Stephen Walther has a good article о присвоении имен для обозначения основных действий CRUD.

2

Использование разных имен требует, чтобы вы пишете больше кода.

Если GET и POST действия имеют такое же имя, то вы можете написать представления с кодом, как:

<% Html.BeginForm() %> 

... вместо ...

<% Html.BeginForm("PostActionName") %> 

Точно так же, ваш пост действие может выглядеть следующим образом:

{ 
    if (!ModelState.IsValid) 
    { 
     return View(Model); 
    } 
    // ... 

... вместо:

{ 
    if (!ModelState.IsValid) 
    { 
     return View("GetActionName", Model); 
    } 
    // ... 

Как вы можете видеть, нет никакого ошеломляющего преимущества давать одно и то же действие; это просто вопрос удобства. Предполагается, что действия GET и POST будут иметь одно и то же имя во многих разных местах. Вы всегда можете переопределить его, но это то, что есть: Переопределение предположения.

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