저는 MVC를 처음 사용하지만 다른 그룹에서 만든 기존 코드를 일부 변경했습니다.MVC는 ajax.beginform을 사용하여 부분 뷰에서 데이터를 제출하고 저장할 수 없습니다.
몇 가지 부분보기가있는 사용자 데이터보기가 있으며 "프로필"섹션 (이름, 전화 번호 등)을 업데이트하고 싶습니다. 문제는 "저장"버튼을 클릭해도 아무런 효과가 없습니다. 컨트롤러에 중단 점을 설정하더라도 해당 코드에 도달하는 사이트가 표시되지 않습니다.
현재 코드의 주요 부분입니다.
"사용자 상세"보기 :
@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>
...
"사용자 프로필"부분보기 :
// (I 추가 HttpMethod = "포스트")
@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]를 추가 함)
(210)[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() 메서드가 작동하는지 확인해야합니다. 몇 가지 옵션을 확인하고 검색하여 시도했으며 과 내가 누락 된 항목을 찾지 못했습니다. 결국, 분명히, 나는 데이터를 업데이트 할 수 있기를 원한다.
감사합니다.
업데이트 : @ Html.Action ("UserProfile")을보기에 추가하면 코드에 접근 할 수 있지만 "Ajax 요청 예상"오류가 발생합니다. – user1970778