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

为什么将 0 作为 ActionLink 的最后一个参数?它应该为空。

<%= 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 回答