我是 MVC 的新手,但我一直在对另一个组创建的现有代码进行一些更改。
有一个包含多个部分视图的用户数据视图,我想更新“个人资料”部分(姓名、电话等)。问题是点击“保存”按钮什么也没做。在控制器上设置断点甚至不会显示站点到达该代码。
这些是当前代码的主要部分。
“用户详细信息”视图:
@model UserDetailsModel
@{
Layout = "~/Views/Shared/_ApplicationLayout.cshtml";
}
...
<h2>User Details</h2>
...
<hr />
<div class="row">
<div class="span2">
<ul class="nav nav-pills nav-stacked" id="js-side-nav" data-spy="affix">
<li class="active"><a href="#profile">Profile</a></li>
<li><a href="#userdevices">Functions</a></li>
...
</ul>
</div>
<div class="span10">
<ul class="unstyled">
<li id="profile">
<h3>Profile</h3>
@Html.Partial("_UserProfile", Model.ProfileModel)
<hr />
</li>
<li id="functions">
<h3>Functions</h3>
@Html.Partial("_UserFunctions", Model.FunctionsModel)
<hr />
</li>
...
“用户资料”部分视图:
// (我添加了 HttpMethod = "Post")
@model UserProfileModel
<section id="user-profile-section">
@using (Ajax.BeginForm("UserProfile", "UserDetail", new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "user-profile-section", InsertionMode = InsertionMode.Replace}))
{
@Html.EditorForModel("CustomForm")
<input class="btn btn-primary" type="submit" value="Save Profile"/>
}
</section>
“用户详细信息”控制器:
//(我添加了[System.Web.Http.HttpPost])
[System.Web.Http.HttpPost]
public ActionResult UserProfile(Guid userId, [FromBody] UserProfileModel model)
{
if(!Request.IsAjaxRequest())
throw new Exception("Expecting ajax request");
if(!ModelState.IsValid)
return PartialView("_UserProfile", model);
var service = new UserService();
WebUser user = service.GetUserProfile(userId, SessionState.ApplicationId);
Mapper.DynamicMap(model, user.Profile, model.GetType(), user.Profile.GetType());
service.UpdateUser(user);
return PartialView("_UserProfile", model);
}
“用户档案”模型:
using System.ComponentModel.DataAnnotations;
namespace UserDetail
{
public class UserProfileModel
{
[Required]
[Display(Name = "First Name")]
public string ContactFirstName { get; set; }
[Required]
[Display(Name = "Last Name")]
public string ContactLastName { get; set; }
[Display(Name = "Business Phone")]
public string ContactBusinessPhone { get; set; }
...
ClientValidationEnabled 和 UnobtrusiveJavaScriptEnabled 在 web.config 上设置为 TRUE。
我首先想让代码到达控制器中的 UserProfile 部分,这样我才能确保 service.UpdateUser() 方法有效。我已经检查、搜索并尝试了几个选项,但我没有找到我所缺少的。最后,显然,我希望能够更新数据。
谢谢。