首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MVC 3-模型在AJAX控制器中始终是空的

MVC 3-模型在AJAX控制器中始终是空的
EN

Stack Overflow用户
提问于 2013-12-18 17:39:35
回答 2查看 287关注 0票数 0

全,

当通过AJAX向我的控制器(/Contact/Process)提交表单值时,模型总是为null,而ModelState.IsValid总是为false。不知道为什么模型是空的。AJAX帖子正在工作,并且存在水化参数。

谢谢

FireBug

参数

Contact.Email xxx@example.com

Contact.FirstName约翰

Contact.LastName Doe

Contact.Message嗨在那儿

X请求-使用XMLHttpRequest

接触提交

视图模型

代码语言:javascript
运行
复制
namespace GuitarCollector.Models.ViewModels
{
    public class ContactViewModel
    {
        public Contact Contact { get; set; }
    }
}

模型

代码语言:javascript
运行
复制
namespace GuitarCollector.Models
{
    public class Contact
    {
        //Primary Key
        public int Id { get; set; }

        [Display(Name = "First name")]
        [Required(ErrorMessage = "Please enter your first name")]
        public string FirstName { get; set; }

        [Display(Name = "Last name")]
        [Required(ErrorMessage = "Please enter your last name")]
        public string LastName { get; set; }



        [Display(Name = "Email address")]
        [Required(ErrorMessage = "Please enter your email address")]
        public string Email { get; set; }

        [Display(Name = "Message")]
        [Required(ErrorMessage = "Please enter your message")]
        public string Message { get; set; }

        public DateTime DateCreated { get; set; }
    }
}

表单

代码语言:javascript
运行
复制
<div id="content">
    <div id="Status"></div>
    @using (Ajax.BeginForm("Process","Contact", new AjaxOptions{ HttpMethod = "POST", UpdateTargetId = "Status"}))
    {
         @Html.ValidationSummary(true)

         <p><span class="required">&#42; All fields are required.</span></p>

        <!-- First Name -->
        <div>
            @Html.LabelFor(model => model.Contact.FirstName) <span class="required">&#42;</span>
        </div>
        @Html.EditorFor(model => model.Contact.FirstName)
        @Html.ValidationMessageFor(model =>model.Contact.FirstName)

        <!-- Last Name -->
         <div>
            @Html.LabelFor(model => model.Contact.LastName) <span class="required">&#42;</span>
        </div>
        @Html.EditorFor(model => model.Contact.LastName)
        @Html.ValidationMessageFor(model =>model.Contact.LastName)

        <!-- Email -->
         <div>
            @Html.LabelFor(model => model.Contact.Email) <span class="required">&#42;</span>
        </div>
        @Html.EditorFor(model => model.Contact.Email)
        @Html.ValidationMessageFor(model =>model.Contact.Email)

        <!-- Message -->
         <div>
            @Html.LabelFor(model => model.Contact.Message) <span class="required">&#42;</span>
        </div>
        @Html.TextAreaFor(model => model.Contact.Message)
        @Html.ValidationMessageFor(model =>model.Contact.Message)

        <div>
            <input type="submit" name="contact" id="contact" value="Submit" class="btn"/> 
       </div>

    }

</div>

控制器

代码语言:javascript
运行
复制
[HttpPost]
public ActionResult Process(ContactViewModel model)
{
    if (ModelState.IsValid)
    {
        model.Contact.DateCreated = DateTime.Now;
        db.Contacts.Add(model.Contact);
        db.SaveChanges();

        return Content("Success!");

    }

    return Content("Failure");

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-18 18:12:26

您必须为视图模型的属性名以外的submit输入提供其他名称,或者完全删除它。我觉得你其实不需要它。在这种情况下,它不会被序列化并传递给控制器。

由于模型绑定程序不能将值“提交”绑定到Contact属性,所以模型将以null的形式出现。

票数 2
EN

Stack Overflow用户

发布于 2013-12-18 17:43:42

你忘了:

代码语言:javascript
运行
复制
 @Html.HiddenFor(model => model.Contact.Id )
 @Html.HiddenFor(model => model.Contact.DateCreated)

而且asp.net mvc不能进行绑定

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20664831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档