MVC无法使用ajax.beginform从部分视图提交和保存数据

时间:2013-01-11 20:05:35

标签: c# asp.net-mvc

我是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; }

...

在web.config上将ClientValidationEnabled和UnobtrusiveJavaScriptEnabled设置为TRUE。

我首先想让代码到达控制器中的UserProfile部分,以便我可以 确保service.UpdateUser()方法有效。我检查,搜索并尝试了几种选择 我没有找到我所缺少的东西。最后,显然,我希望能够更新数据。

感谢。

1 个答案:

答案 0 :(得分:0)

我敢打赌你有一些字段验证错误,但它没有相应的验证消息或被隐藏,因此你没有看到错误。也许要测试一下,只需删除表单的全部内容,除了提交按钮,看它是否成功提交。

另一个尝试作为故障排除步骤的事情是更改(将其复制到测试后要恢复的评论)

@using (Ajax.BeginForm("UserProfile", "UserDetail", new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "user-profile-section", InsertionMode = InsertionMode.Replace}))

...到一个简单的Html.BeginForm,只是为了确定/排除这里AJAX出现问题的可能性,或许无法找到UpdateTargetId。

此外,在Chrome上打开F12,切换到控制台标签,刷新页面并提交,以查看是否出现任何javascript错误。

最后,尝试暂时删除[FromBody]属性作为测试。一些属性影响路由,我不确定这个是否会,因为我从未使用它。

相关问题