위의 문제를 해결할 수있는 세 가지 방법이 있습니다
- HTML 방식
- jquery 방법
- “ActionNameSelectorAttribute”방식
아래는 세 가지 접근 방식을 모두 설명하는 비디오입니다.
https://www.facebook.com/shivprasad.koirala/videos/vb.100002224977742/809335512483940
HTML 방식 :-
HTML 방식으로 두 개의 양식을 작성하고 각 양식 안에 "제출"단추를 배치해야합니다. 그리고 모든 양식의 작업은 다른 / 각각의 작업을 가리 킵니다. 아래 코드는 첫 번째 양식이 "Action1"에 게시되고 두 번째 양식은 클릭 한 "Submit"단추에 따라 "Action2"에 게시되는 것을 볼 수 있습니다.
<form action="Action1" method=post>
<input type=”submit” name=”Submit1”/>
</form>
<form action="Action2" method=post>
<input type=”submit” name=”Submit2”>
</form>
아약스 방법 :-
Ajax 애호가라면이 두 번째 옵션이 더 자극적입니다. Ajax 방식으로 두 개의 다른 함수“Fun1”및“Fun1”을 작성할 수 있습니다 (아래 코드 참조). 이 함수는 JQUERY 또는 다른 프레임 워크를 사용하여 Ajax를 호출합니다. 이러한 각 기능은 "제출"버튼의 "OnClick"이벤트와 바인딩됩니다. 이 함수들 각각은 각각의 액션 이름을 호출합니다.
<Script language="javascript">
function Fun1()
{
$.post(“/Action1”,null,CallBack1);
}
function Fun2()
{
$.post(“/Action2”,null,CallBack2);
}
</Script>
<form action="/Action1" method=post>
<input type=submit name=sub1 onclick=”Fun2()”/>
</form>
<form action="/Action2" method=post>
<input type=submit name=sub2 onclick=”Fun1()”/>
</form>
"ActionNameSelectorAttribute"사용 :-
이것은 훌륭하고 깨끗한 옵션입니다. "ActionNameSelectorAttribute"는 실행할 수있는 조치를 결정하는 의사 결정 논리를 작성할 수있는 간단한 속성 클래스입니다.
첫 번째는 HTML에서 서버에서 식별하기 위해 제출 버튼에 적절한 이름을 넣어야한다는 것입니다.
버튼 이름에“저장”과“삭제”를 넣었 음을 알 수 있습니다. 또한 특정 조치 이름이 아닌 제어기 이름을 "고객"으로 지정한 조치에서 알 수 있습니다. 동작 이름은 "ActionNameSelectorAttribute"에 의해 결정됩니다.
<form action=”Customer” method=post>
<input type=submit value="Save" name="Save" /> <br />
<input type=submit value="Delete" name="Delete"/>
</form>
따라서 제출 단추를 클릭하면 먼저 "ActionNameSelector"속성에 도달 한 후 실행 된 제출에 따라 적절한 조치를 호출합니다.
첫 번째 단계는 "ActionNameSelectorAttribute"클래스에서 상속되는 클래스를 만드는 것입니다. 이 클래스에서는 간단한 속성“Name”을 만들었습니다.
또한 true 또는 flase를 반환하는“IsValidName”함수를 재정의해야합니다. 이 함수는 액션의 실행 여부에 관계없이 로직을 작성하는 곳입니다. 따라서이 함수가 true를 반환하면 작업이 실행되거나 그렇지 않은 경우입니다.
public class SubmitButtonSelector : ActionNameSelectorAttribute
{
public string Name { get; set; }
public override bool IsValidName(ControllerContext controllerContext, string actionName, System.Reflection.MethodInfo methodInfo)
{
// Try to find out if the name exists in the data sent from form
var value = controllerContext.Controller.ValueProvider.GetValue(Name);
if (value != null)
{
return true;
}
return false;
}
}
위 함수의 핵심은 아래 코드에 있습니다. "ValueProvider"컬렉션에는 양식에서 게시 된 모든 데이터가 있습니다. 따라서 먼저 "Name"값을 찾고 HTTP 요청에서 발견되면 true를 반환하거나 그렇지 않으면 false를 반환합니다.
var value = controllerContext.Controller.ValueProvider.GetValue(Name);
if (value != null)
{
return true;
}
return false;
그런 다음이 속성 클래스를 해당 조치에 장식하고 각각의 "이름"값을 제공 할 수 있습니다. 따라서 제출이이 조치를 수행 중이고 이름이 HTML 제출 단추 이름과 일치하면 조치를 추가로 실행하거나 그렇지 않으면 수행하지 않습니다.
public class CustomerController : Controller
{
[SubmitButtonSelector(Name="Save")]
public ActionResult Save()
{
return Content("Save Called");
}
[SubmitButtonSelector(Name = "Delete")]
public ActionResult Delete()
{
return Content("Delete Called");
}
}