사용자 지정 작업 필터를 사용하여 한 동작에 대한 매개 변수를 조작하고 싶습니다.Asp.NET MVC ActionFilter가 폼 제출 데이터를 가져올 수 없습니다.
사용자 입력 : 양식에 2 개의 이름;
액션 : 실제로 2 개의 ID를 사용해야합니다.
액션 필터 (onExecuting는, 입력 이름을 확인하고 유효한 경우,이 식별자로 변환하고으로 RouteData에서 대체합니다) 내가 액션 컨트롤러에 유효성 검사 논리를 넣어 싶지 않기 때문에
합니다.
라우팅 정보
routes.MapRoute ( "기본", // 경로 이름 "{컨트롤러}/{동작}", // URL :
여기에 코드의 일부 매개 변수가있는 경우 new {controller = "Home", action = "Index"} // 매개 변수 기본값 );
routes.MapRoute ( "RelationshipResults", // 경로 이름 "관계/{initPersonID}/{targetPersonID}", // 매개 변수를 URL 새로운 {컨트롤러 = "관계"행동 = "결과"});
양식 제출
<퍼센트 사용 (Html.BeginForm ("결과", "관계"FormMethod.Post 새로운 {ID = "formSearch"(2 입력 창을 생성하고 JQuery와 통해 제출) })) { %>
...<td align="left"><%: MvcWeibookWeb.Properties.Resource.Home_InitPersonName%></td> <td align="right"> <%= Html.TextBox("initPersonID")%></td> <td rowspan="3" valign="top"> <div id="sinaIntro"> <%: MvcWeibookWeb.Properties.Resource.Home_SinaIntro %> <br /> <%: MvcWeibookWeb.Properties.Resource.Genearl_PromotionSina %> </div> </td> </tr> <tr> <td align="left" width="90px"><%: MvcWeibookWeb.Properties.Resource.Home_TargetPersonName%></td> <td align="right"><%= Html.TextBox("targetPersonID")%></td> </tr> <tr> <td colspan="2" align="right"> <a href="#" class="btn-HomeSearch" onclick="$('#formSearch').submit();"><%: MvcWeibookWeb.Properties.Resource.Home_Search%></a> </td>
액션 필터
public override void OnActionExecuting(ActionExecutingContext filterContext) { Sina.Searcher searcher = new Sina.Searcher(Sina.Processor.UserNetwork); String initPersonName, targetPersonName; // form submit names, we need to process them and convert them to IDs before it enters the real controller. initPersonName = filterContext.RouteData.Values["initPersonID"] as String; targetPersonName = filterContext.RouteData.Values["targetPersonID"] as String; // do sth to convert it to ids and replace
,
액션/컨트롤러
[ValidationActionFilter] [는 handleError] 공공 ActionResult 결과 (INT64 initPersonID, INT64 targetPersonID) {...
내 문제가없는 다음 actionFilter에서, 그것은 결코 2 개 매개 변수 "initPersonID"와 "targetPersonID"는 RouteData.Values는 ...이 두 키를 포함하지 않는
을 :(얻을 수
감사 내가 – Goden
하자 그들 (업데이트 인라인을) 변경 한 날 올바른 1 일, 난 HTTP를 입력하면 : // localhost를/관계/이름 1/NAME2 는 동작을 트리거 않습니다 필터를 적용하고 값을 가져 오지 만 양식을 통해 제출하면 양식이 표시되지 않습니다. – Goden
지금부터는 흥미로운 일이 있습니다. 폼에서 데이터를 제출하면 filterContext.HttpContext.Request.Form [ "initPersonID"]에 의해 폼 데이터를 얻을 수 있습니다. 하지만 initPersonName = filterContext.RouteData.Values [ "initPersonID"]를 String으로 사용할 수 있습니다. URL에 직접 이름을 입력하면 문자열을 가져옵니다. 왜이 두 사람이 연합하지 않았습니까? – Goden