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

사용자가 병원 유아 기록의 진행을 마무리하거나 저장할 수있는 비슷한 시나리오를 처리해야했습니다. 본질적으로 두 작업은 제출되지만 기본 DB 테이블에 삽입하기위한 레코드와 다른 레코드의 유효성을 확인합니다 하나는 유효성 검사없이 임시 테이블에 저장됩니다. 나는 이것을 다음과 같이 처리했다 :

나는 두 개의 버튼이 서로 다른 ID (btnSave와 btnFinalize)를 가진 타입 제출이다.

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

당신은 내가 거짓 마무리 =의 쿼리 문자열 속성을 가진 다른 URL을 가리 키도록 형태의 동작 특성을 수정 볼 수 있듯이 : btnSave가 클릭하면 좀 JQuery와 코드와 함께 해당 이벤트를 가로 챌. 또한 모델에있는 유효성 검사를 제거합니다. 다른 버튼을 클릭하면 아무것도하지 않고 기본 동작을 실행합니다.

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

난 당신이 문제에 대한 유사한 기술을 적용 할 수 있다고 생각 :

그리고 내 컨트롤러에서

은 둘 다 작업을 제출 처리하는 단일 작업을해야합니다. ... 나는 당신이 찾고있는 해답이 있는지 모르겠지만 나는 그것을 언급 할 가치라고 생각