为什么视图模型传递给我的action方法为null?

时间:2016-11-15 08:20:34

标签: asp.net-mvc asp.net-mvc-5

我似乎无法使用模型传递表单值。我不想求助于使用单个参数/ FormCollection / Request,然后使用值实例化模型类。

我的模特

//JcSpaceAccount.cs
namespace JcSpaceEntities
{
    public class JcSpaceAccount
    {
        public string FirstName;
        public string LastName;
        public string Email;
        public DateTime DateOfBirth;
    }
}

我的观点

//Registration.cshtml
@model JcSpaceEntities.JcSpaceAccount

<!DOCTYPE html>

<div class="form-horizontal">
    <h4>JcSpaceAccount</h4>
    <hr />

    @using (Html.BeginForm("Registration", "Registration", FormMethod.Post))
    {
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                @Html.LabelFor(m => m.FirstName)
            </div>
            <div class="col-md-offset-2 col-md-10">
                @Html.TextBoxFor(m => m.FirstName)
            </div>
            </div>
            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    @Html.LabelFor(m => m.LastName)
                </div>
                <div class="col-md-offset-2 col-md-10">
                    @Html.TextBoxFor(model => model.LastName)
                </div>
            </div>
            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    @Html.LabelFor(m => m.Email)
                </div>
                <div class="col-md-offset-2 col-md-10">
                    @Html.TextBoxFor(model => model.Email)
                </div>
            </div>
            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    @Html.LabelFor(m => m.DateOfBirth)
                </div>
                <div class="col-md-offset-2 col-md-10">
                    @Html.TextBoxFor(model => model.DateOfBirth)
                </div>
            </div>
            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="submit" value="Create" class="btn btn-default" />
                </div>
            </div>
    }
</div>

我的控制器

namespace JcSpace.Areas.Registration.Controllers
{
    public class RegistrationController : Controller
    {
        // GET: Registration/Registration
        [HttpGet]
        public ActionResult Registration()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Registration(JcSpaceAccount entity)
        {

            return View();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您应该将模型更改为:

public class JcSpaceAccount
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public DateTime DateOfBirth { get; set; }
}

问题是默认MVC ModelBinder适用于properties,现在您的模型中有fields。因此默认模型绑定器无法填充它们。

将您的JcSpaceAccount fields更改为properties,即可获得发布的数据。

在你的Post控制器方法中你应该将你的模型设置为@ haim770说:

    [HttpPost]
    public ActionResult Registration(JcSpaceAccount entity)
    {
        ViewData.Model = entity; //This line
        return View();
    }

答案 1 :(得分:0)

在用Registration()装饰的HttpGet方法上。

    [HttpGet]
    public ActionResult Registration()
    {
        return View(new JcSpaceAccount());
    }