【发布时间】:2015-04-18 11:59:42
【问题描述】:
我有一个网页,它使用许多不同的局部视图和每个局部视图的不同视图模型。其中一个部分是用户更改其用户名的能力。由于我们现在将允许电子邮件地址作为用户名,因此我想使用页面上另一个部分视图中的当前电子邮件地址预先填充文本框。如何正确完成此操作,以便将值填充到文本框中,然后在提交到控制器时保存?这是我正在查看的简短代码 sn-p:
观点:
@Html.TextBoxFor(model => model.NewUsername, new { id = "uName_change" }) @Html.ValidationMessageFor(model => model.NewUsername)
这里值得注意的是,我尝试将当前电子邮件地址设置为 ViewData 和 ViewBag 并将“@value = viewdatahere”放入属性文本框中,但这并没有填充字符串,它只是将其留空。
我只需要知道这是如何完成的。任何帮助表示赞赏。
编辑以添加控制器 POST 和 GET 方法:
[HttpGet]
[ClaimsPrincipalPermission(System.Security.Permissions.SecurityAction.Demand, Resource = Resources.User, Operation = Operations.Edit)]
public ActionResult ChangeUsername(Guid uniqueUserId)
{
User user = UserManager.GetUser(uniqueUserId);
AuthorizationHelper.ConfirmAccess(Resources.User, Operations.Edit, user);
ChangeUsername model = new ChangeUsername(){UserGuid = user.Identifier,NewUsername = user.Username};
return View(model);
}
[HttpPost]
[ClaimsPrincipalPermission(System.Security.Permissions.SecurityAction.Demand, Resource = Resources.User, Operation = Operations.Edit)]
public ActionResult ChangeUsername(ChangeUsername changeUsername)
{
User usr = UserManager.GetUser(changeUsername.UserGuid);
AuthorizationHelper.ConfirmAccess(Resources.User, Operations.Edit, usr);
if (!ModelState.IsValid)
{
return View(changeUsername);
}
//setup request
SupportUser su = (SupportUser)ViewData["SupportUser"];
RequestData rqd = new RequestData(GetApplicationIdentifer(usr), su.clientIP, su.lanID);
UserUsernameChangeRequest request = new AdminUsernameChangeRequest(rqd,usr,changeUsername.NewUsername);
UserUsernameChangeResponse response = UserManager.ChangeUserUsername(request);
if (response.Status == UserProcessorStatus.Success)
{
var message = ("User has been updated successfully");
TempData["message"] = message;
return PartialView("_NewUsername", changeUsername);
}
switch (response.Status)
{
case UserProcessorStatus.DuplicateUsername:
{
ModelState.AddModelError("NewUsername", "Duplicate username");
changeUsername.AlternateUsernames = response.AlternateUsernames;
return PartialView(changeUsername);
}
default:
{
ModelState.AddModelError("NewUsername", String.Format("An unexpected error occured. Error Code:{0}, Message:{1}", response.Status, response.Message));
return PartialView(changeUsername);
}
}
}
就是这样。
【问题讨论】:
-
你能发布你的控制器方法吗?
-
完成了,有一个帖子和一个get。
-
当你单步执行时,你用来拉回电子邮件地址的方法是否真的有效
-
是的,页面上的一切都在工作,并显示用户对象上的所有属性(这是一个很长的属性列表)。我只想获取电子邮件地址值,并使用该值在我正在处理的视图中预填充“NewUsername”文本框。
标签: c# .net razor model-view-controller