2013-09-16 2 views
0

Я искал хороший трюк для обработки нескольких кнопок отправки в форме, а затем я получил совет от этого URL-адреса, и я последовал, но не смог. How do you handle multiple submit buttons in ASP.NET MVC Framework?Обращение с несколькими кнопками отправки в форме

размещено на @Andrey Shchekin.

он просто сказал создать класс, как показано ниже один, так что я сделал в одном контроллере

public class HttpParamActionAttribute : ActionNameSelectorAttribute { 
    public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo) { 
     if (actionName.Equals(methodInfo.Name, StringComparison.InvariantCultureIgnoreCase)) 
      return true; 

     if (!actionName.Equals("Action", StringComparison.InvariantCultureIgnoreCase)) 
      return false; 

     var request = controllerContext.RequestContext.HttpContext.Request; 
     return request[methodInfo.Name] != null; 
    } 
} 

затем множественная кнопка отправки в окне просмотра выглядеть & также контроллер коду выглядеть, как показано ниже

<% using (Html.BeginForm("Action", "Post")) { %> 
    <!— …form fields… --> 
    <input type="submit" name="saveDraft" value="Save Draft" /> 
    <input type="submit" name="publish" value="Publish" /> 
<% } %> 

and controller with two methods 

public class PostController : Controller { 
    [HttpParamAction] 
    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult SaveDraft(…) { 
     //… 
    } 

    [HttpParamAction] 
    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Publish(…) { 
     //… 
    } 
} 

но когда я проверяю его код, он никогда не работает. поэтому любой может сказать мне, где я делаю ошибку или сам код, неправильно для обработки ситуации. спасибо

ответ

3

Вид:

<input type="submit" name="mySubmit" value="Save Draft" /> 
<input type="submit" name="mySubmit" value="Publish" /> 

Действие контроллера:

[HttpPost] 
public ActionResult ActionName(ModelType model, string mySubmit) 
{ 
    if(mySubmit == "Save Draft") 
    { 
     //save draft code here 
    } else if(mySubmit == "Publish") 
    { 
     //publish code here 
    } 
} 
1

Мне пришлось иметь дело с подобным сценарием, когда у меня было требование, чтобы пользователи могли завершить или сохранить прогресс в записи больничного младенца - по сути, оба действия отправляются, но один проверяет запись для вставки в основную таблицу БД, а другой один сохраняет его в временную таблицу без какой-либо проверки. Я обработал его вот так:

У меня есть две кнопки, которые представляют собой тип отправки с разными идентификаторами (btnSave и btnFinalize). Когда btnSave щелкают перехватывать это событие с каким-то JQuery код:

$("#btnSave").click(function() { 
    $("#SaveForm").validate().settings.rules = null; 
    $('#SaveForm').attr('action', '@(Url.Content("~/Home/EditCase?finalize=false"))'); 
}); 

Как вы можете видеть, что я изменить атрибут действия формы, чтобы указать другой URL с атрибутом строки запроса о финализации = ложной. Я также удаляю любую валидацию, присутствующую на модели. Если нажата другая кнопка, я ничего не делаю - выполняет поведение по умолчанию.

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

public ActionResult EditCase(EditInfantModel model, bool finalize = true) 
{ 
    // Logic for handling submit in here... 
} 

Я думаю, что вы можете применить подобную технику для вашей проблемы. Я не уверен, если это ответ, который вы ищете, но я подумал, что стоит упомянуть ...

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