[править]
, чтобы повторить мою точку зрения в комментариях к другим ответам: когда вы связываете логику со значением кнопки в C #, вы привязываете свой код C # к этому языку.
Представьте, что у вас есть кнопка Сохранить в английской версии как:
<input type="submit" value="Insert" name='button' />
, и в вашем коде вы собираетесь переключаться, используя значение:
public ActionResult Index(string button)
{
switch (button)
{
case "Insert": ...
case "Update": ...
case "Delete": ...
}
return View();
}
Сейчас- когда эта форма просматривается на другом языке - как вы думаете, что произойдет?!?!
вот вывод welsh html:
<input type="submit" value="Mewnosod" name='button' />
и немецкий:
<input type="submit" value="Einfügen" name='button' />
Как это КОГДА-ЛИБО будет работать?!
Глобализация не является отдельной проблемой !!!!
Ваше действие будет выглядеть следующим образом, если вы используете этот метод:
public ActionResult Index(string button)
{
switch (button)
{
case "Insert": ...
case "Update": ...
case "Delete": ...
case "Einfügen": ...
case "Mewnosod": ....
.... a load of other languages for each action type -
}
return View();
}
пожалуйста ... серьезно ....
[/ edit]
Вот мой код селектора действий MVC: Селектор действий Asp.Net Mvc
По сути, вам нужен класс селектора действий:
/// <summary>
/// AcceptParameterAttribute to enable submit buttons to execute specific action methods.
/// </summary>
public class AcceptParameterAttribute : ActionMethodSelectorAttribute
{
/// <summary>
/// Gets or sets the value to use in submit button to identify which method to select. This must be unique in each controller.
/// </summary>
public string Action { get; set; }
/// <summary>
/// Determines whether the action method selection is valid for the specified controller context.
/// </summary>
/// <param name="controllerContext">The controller context.</param>
/// <param name="methodInfo">Information about the action method.</param>
/// <returns>true if the action method selection is valid for the specified controller context; otherwise, false.</returns>
public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
{
if (controllerContext == null)
{
throw new ArgumentNullException("controllerContext");
}
var req = controllerContext.RequestContext.HttpContext.Request;
return req.Form.AllKeys.Contains(this.Action);
}
}
, который работает от имени, которое вы даете кнопке.
Затем вы можете украсить действия с помощью:
[AcceptParameter(Action = "Edit")]
public ActionResult Person_Edit(PersonViewModel model){
...
}
Переключение в действии грязно - это гораздо более чистый подход.Я думаю, что гораздо более естественным тоже.