3.4 Edit修改用户信息
我们用FormCollection简化了表单提交,非常方便的进行用户信息修改。
[HttpPost, Authorize] public async Task<ActionResult> Edit(User user, FormCollection values) { try { ActiveDirectoryClient client = AuthenticationHelper.GetActiveDirectoryClient(); IUser toUpdate = await client.Users.GetByObjectId(values[“ObjectId”]).ExecuteAsync(); foreach (var value in values) { var sourceProp = user.GetType().GetProperty(value.ToString(), BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic); var destProp = toUpdate.GetType().GetProperty(value.ToString(), BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic); if (null != sourceProp && sourceProp.CanRead) { if (null != destProp && destProp.CanWrite) { destProp.SetValue(toUpdate, sourceProp.GetValue(user, null), null); } } } await toUpdate.UpdateAsync(); return RedirectToAction("Index"); } catch (Exception) { return View(); } }
对应的View代码为
@model Microsoft.Azure.ActiveDirectory.GraphClient.User @{ ViewBag.Title = "UserEdit"; } <h2>UserEdit</h2> @using (Html.BeginForm("Edit", "AzureActiveDirectory", null, FormMethod.Post, new { @class = "form-horizontal" })) { @Html.ValidationSummary(true) <div class="form-group"> @Html.Label("照片", new { @class = "col-sm-2 control-label" }) <input type=file name="photofile" class="col-sm-10" /> </div> <div class="form-group"> @Html.LabelFor(model => model.UserPrincipalName,"用户名(全名)", new { @class = "col-sm-2 control-label" }) <div class="col-sm-10"> @Html.DisplayFor(model => model.UserPrincipalName) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.DisplayName,"显示名称", new { @class = "col-sm-2 control-label" }) <div class="col-sm-10"> @Html.EditorFor(model => model.DisplayName) @Html.ValidationMessageFor(model => model.DisplayName) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.AccountEnabled,"账号状态", new { @class = "col-sm-2 control-label" }) <div class="col-sm-10"> @Html.EditorFor(model => model.AccountEnabled) @Html.ValidationMessageFor(model => model.AccountEnabled) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.GivenName,"名字", new { @class = "col-sm-2 control-label" }) <div class="col-sm-10"> @Html.EditorFor(model => model.GivenName) @Html.ValidationMessageFor(model => model.GivenName) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Surname,"姓氏", new { @class = "col-sm-2 control-label" }) <div class="col-sm-10"> @Html.EditorFor(model => model.Surname) @Html.ValidationMessageFor(model => model.Surname) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.JobTitle,"职务", new { @class = "col-sm-2 control-label" }) <div class="col-sm-10"> @Html.EditorFor(model => model.JobTitle) @Html.ValidationMessageFor(model => model.JobTitle) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Department,"部门", new { @class = "col-sm-2 control-label" }) <div class="col-sm-10"> @Html.EditorFor(model => model.Department) @Html.ValidationMessageFor(model => model.Department) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Mobile, new { @class = "col-sm-2 control-label" }) <div class="col-sm-10"> @Html.EditorFor(model => model.Mobile) @Html.ValidationMessageFor(model => model.Mobile) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.StreetAddress,"街道地址", new { @class = "col-sm-2 control-label" }) <div class="col-sm-10"> @Html.EditorFor(model => model.StreetAddress) @Html.ValidationMessageFor(model => model.StreetAddress) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.City,"城市", new { @class = "col-sm-2 control-label" }) <div class="col-sm-10"> @Html.EditorFor(model => model.City) @Html.ValidationMessageFor(model => model.City) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.State,"省/自治区/直辖市", new { @class = "col-sm-2 control-label" }) <div class="col-sm-10"> @Html.EditorFor(model => model.State) @Html.ValidationMessageFor(model => model.State) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Country,"国家或地区", new { @class = "col-sm-2 control-label" }) <div class="col-sm-10"> @Html.EditorFor(model => model.Country) @Html.ValidationMessageFor(model => model.Country) </div> </div> <p> <input type="submit" value="Edit" class="btn btn-primary" /> </p> } <div> @Html.ActionLink("Back to List", "Index") </div> @section Scripts { @Scripts.Render("~/bundles/jqueryval") }
成功运行后的效果为
返回Index,你会观察到职务列有了信息