Создание пользовательской кнопки в ASP.NET MVC (не кнопки для создания, чтения, обновления, удаления) - PullRequest
0 голосов
/ 22 марта 2012

Я не знаю, сталкивались ли вы с подобной ситуацией, но вот требование, которое мне было дано: -

Я управляю сайтом ASP.NET MVC, который управляет информацией о нашей клиентской компании. Из-за проблем с юзабилити нас попросили снять некоторые флажки и заменить их общей кнопкой «Применить» на нашей странице редактирования.

Текущий сценарий, который мы имеем на нашей странице редактирования:

  1. Флажок «Включить настройки скорости для всех активов»
  2. Флажок «Включить корректирующие действия для всех активов»
  3. При нажатии кнопки Сохранить триггер обновляет базу данных.

В настоящее время требуется одна кнопка для выполнения обеих операций. Это, очевидно, нуждается в новой хранимой процедуре NHibernate, но это проблема на потом. Поэтому, что меня интересует, может ли кнопка такого рода быть достигнута в MVC? Если так, есть ли у кого-нибудь опыт, который мог бы помочь, особенно в создании методов ActionResult? Спасибо. :)

1 Ответ

1 голос
/ 22 марта 2012

Я бы рекомендовал поискать здесь решение:

http://weblogs.asp.net/dfindley/archive/2009/05/31/asp-net-mvc-multiple-buttons-in-the-same-form.aspx

По сути, вы можете отправить данные в ваш метод действия и проверить, какие действия предпринять - сохранить или применить. Или вы можете разделить их на два действия контроллера примерно так (воспринято из статьи выше):

[ActionName("Register")]
[AcceptVerbs(HttpVerbs.Post)]
[AcceptParameter(Name="button", Value="cancel")]
public ActionResult Register_Cancel()
{
    return RedirectToAction("Index", "Home");
}

[AcceptVerbs(HttpVerbs.Post)]
[AcceptParameter(Name="button", Value="register")]
public ActionResult Register(string userName, string email, string password, string confirmPassword)
{
   // process registration
}

Кнопка

<button name="button" value="register">Register</button>
<button name="button" value="cancel">Cancel</button>

Простой фильтр:

public class AcceptParameterAttribute : ActionMethodSelectorAttribute
{
    public string Name { get; set; }
    public string Value { get; set; }

    public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
    {
        var req = controllerContext.RequestContext.HttpContext.Request;
        return req.Form[this.Name] == this.Value;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...