2010-11-24 2 views
1

부분보기가 양식을 포함하고 있으며이 부분보기는 다른 양식과 HTML을 포함하는보기에 있습니다.
제출을 누르면 유효성 검사가 실패하면 원본 URL 대신이 부분보기 양식 작업이 URL에 표시됩니다.부분보기 컨테이너보기 동작 대신 URL에 해당 동작을 표시합니다.

부모보기 "사용자 계정" - 부분보기 로그인 - 부분보기를 등록

원래 URL 열려있는 페이지가있는 경우 :/사용자/계정
레지스터 유효성 검사가 실패 URL :/사용자/회원 가입

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<PicGhost.Website.ViewModels.RegisterViewModel>" %> 

    <% using (Html.BeginForm("Register", "Users", FormMethod.Post)) {%> 
     <%: Html.ValidationSummary(true) %> 

     <fieldset> 
      <legend>Fields</legend> 

      <div class="editor-label"> 
       <%: Html.LabelFor(model => model.UserName) %> 
      </div> 
      <div class="editor-field"> 
       <%: Html.TextBoxFor(model => model.UserName) %> 
       <%: Html.ValidationMessageFor(model => model.UserName) %> 
      </div> 

      <div class="editor-label"> 
       <%: Html.LabelFor(model => model.Email) %> 
      </div> 
      <div class="editor-field"> 
       <%: Html.TextBoxFor(model => model.Email) %> 
       <%: Html.ValidationMessageFor(model => model.Email) %> 
      </div> 

      <div class="editor-label"> 
       <%: Html.LabelFor(model => model.Password) %> 
      </div> 
      <div class="editor-field"> 
       <%: Html.PasswordFor(model => model.Password)%> 
       <%: Html.ValidationMessageFor(model => model.Password) %> 
      </div> 

      <div class="editor-label"> 
       <%: Html.LabelFor(model => model.ConfirmPassword) %> 
      </div> 
      <div class="editor-field"> 
       <%: Html.PasswordFor(model => model.ConfirmPassword) %> 
       <%: Html.ValidationMessageFor(model => model.ConfirmPassword) %> 
      </div> 

      <p> 
       <input type="submit" value="Register" /> 
      </p> 
     </fieldset> 

    <% } %> 

그리고 등록 조치 : :

여기

내 부분이다
 [HttpPost] 
     public ActionResult Register(RegisterViewModel model) 
     { 
      if (ModelState.IsValid) 
      { 
       IUser user = _factory.CreateUser(model.UserName, model.Email, model.Password); 
       UserRepository.Add(user); 
       return RedirectToAction("Index"); 
      } 
      return View(model); 
     } 

어떻게이 잘못된 URl을 표시하지 않고 원본 URL을 유지 하시겠습니까?

원본 URL :
alt text

검증 URL 후 :
alt text

답변

2

/users/register에 게시하면 응답을 반환합니다.

이를 방지하려면 다음 중 하나를

  1. 포스트 페이지 생성 한 행동 - 당신 이 여러 가지 형태
  2. 나보다는 뷰를 반환은에 redirecttoaction를 반환하면 아마 불가능을 원래 작업

작업에 리디렉션하는 경우 모델 데이터를 처리해야하지만 여러 가지 하위 작업이 필요할 수 있습니다 - 리디렉션을 위해 TempData 컬렉션에서 다시 데이터를 전달할 수 있습니다.

0

당신은 포함하는 뷰를 반환해야합니다. Modelstate가 유효하지 않기 때문에 부분 뷰만 반환됩니다. 즉, 어떻게 든 부분 뷰의 모델 상태를 부분 뷰로 되돌려 야합니다. 부모보기에 자식 모델이 포함 된 모델이 있으면이 작업을 한 번 수행했습니다. 계정보기

<% Html.RenderPartial("Register", Model.RegisterModel); %> 

에서 그런 다음이

public class ParentViewModel 
{ 
    public RegisterViewModel RegisterModel { get; set; } 
} 

같은

뭔가 그런 다음 ParentViewModel를 구축하고 RegisterViewModel에 덤프와 ModelState이 무효 인 경우 다음 계정보기를 반환 할 수 있습니다. Register 액션에는 다음과 같은 것이 있습니다.

if (ModelState.IsValid) 
{ 
    ... 
} 

var parentModel = new ParentViewModel() 
{ 
    RegisterModel = model; 
}; 

return View("Account", parentModel); 

항상 RegisterModel을 초기화하면 오류가 발생합니다.

+0

정확히 내가 쓴 예제에서했던 것과 똑같은 결과를 얻었지만, 내 질문과 같은 결과를 얻었습니다. (문제의 위치를 ​​알고 있습니까? –

+0

) 메서드의 마지막 줄과 Register 메서드를 호출하기 때문에 – Josh

+0

아니요,이 뷰로 변경했습니다. View ("view"()); Account ", parentModel); 답안에 나열한대로 –

관련 문제