0

私はまだ学習中で、これを行う方法がわかりません。コントローラーに次のものがあります。

[HttpGet]
public ActionResult Detail(int userId)
{
  var user = ZincService.GetUserForId(userId);
  UserDetailViewModel userDetail = new UserDetailViewModel();
  userDetail.UserId = userId;
  userDetail.Email = user.Email;
  userDetail.Firstname = user.Firstname;
  userDetail.Surname = user.Surname;
  return View(userDetail);
}

[HttpGet]
public ActionResult ChangeEmailAddress()
{
  return View();
}

私の詳細ビューでは:

  <div class="section _100">
     <%: Html.LabelFor(model => model.Email)%> 
         <div>
             <%: Model.Email  %>
             <%: Model.UserId %>
         </div>
         <div>                                      
             <%: Html.ActionLink("Change Email Address",  "ChangeEmailAddress", "User", new { area = "Admin", @id = Model.UserId, @email = Model.Email, @name = Model.Firstname }, 0) %>  

             <%: Html.ValidationMessageFor(model => model.Email)%>    
         </div>
  </div>

ビューのここから、ユーザーが実際にメールを古いものから新しいものに変更できる別のビュー(ChangeEmailAddress)に移動したいだけですか?

ありがとう

4

1 に答える 1

0

ActionLink の最後の引数として 0 を指定したのはなぜですか? null である必要があります。

<%= Html.ActionLink(
    "Change Email Address",  
    "ChangeEmailAddress", 
    "User", 
    new { 
        area = "Admin", 
        id = Model.UserId, 
        email = Model.Email, 
        name = Model.Firstname 
    }, 
    null
) %>  

これで、ChangeEmailAddressアクションはモデルをパラメータとして受け取ることができます:

[HttpGet]
public ActionResult ChangeEmailAddress(UserDetailViewModel user)
{
    return View(user);
}

次にChangeEmailAddress.aspx、このコントローラー アクションによってレンダリングされ、ビュー モデルに厳密に型指定される、対応するビューを定義する必要があります。

ただし、より良い方法は、リクエストでユーザー ID のみを送信し、この ID を使用して実際のユーザー オブジェクトを取得することです。

<%= Html.ActionLink(
    "Change Email Address",  
    "ChangeEmailAddress", 
    "User", 
    new { 
        area = "Admin", 
        id = Model.UserId, 
    }, 
    null
) %>  

その後:

[HttpGet]
public ActionResult ChangeEmailAddress(int id)
{
    // retrieve the user object using the id
    ...
}
于 2012-10-19T08:23:26.573 に答える