私は 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() メソッドが機能することを確認したいと思います。いくつかのオプションを確認、検索、および試しましたが、不足しているものは見つかりませんでした。最後に、明らかに、データを更新できるようにしたいと考えています。
ありがとう。