【问题标题】:ViewModel values are always nullViewModel 值始终为空
【发布时间】:2016-05-17 18:26:50
【问题描述】:

我已经学习了一些教程,也搜索了 StackOverflow,但我仍然处于死胡同。

基本上,我正在尝试在 MVC 5 中提交一个表单(MVC 的新手,虽然大量使用了 WebForms)。所以这是我的组件 -

控制器 (./Controllers/AccountController.cs)

using BitHost.Models;
using System.Web.Mvc;

namespace BitHost.Controllers
{
    public class AccountController : Controller
    {
        // GET: Account
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult Register()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Register(UserAccount model)
        {
            string sEmailAddress = model.EmailAddress;
            string sPassword = model.Password;
            bool bAgreedToTerms = model.AgreedToTerms;

            return Redirect("/");
        }
    }
}

ViewModel (./Models/AccountModel.cs)

namespace BitHost.Models
{
    public class UserAccount
    {
        public string EmailAddress;
        public string Password;
        public bool AgreedToTerms;
    }
}

查看 (./Views/Account/Register.cshtml)

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
    ViewBag.Title = "Register";
}

@model BitHost.Models.UserAccount

<div class="row">
    <h2>Create a new account</h2>
    @using (Html.BeginForm())
    {
        <div class="input-group">
            <span class="input-group-addon"><span class="glyphicon glyphicon-envelope" aria-hidden="true"></span></span>
            @Html.TextBoxFor(model => model.EmailAddress, new { Class = "form-control", Placeholder = "Email Address" })
        </div><br />
        <div class="input-group">
            <span class="input-group-addon"><span class="glyphicon glyphicon-lock" aria-hidden="true"></span></span>
            @Html.TextBoxFor(model => model.Password, new { Class = "form-control", Type = "password", Placeholder = "Password" })
        </div><br />
        <div class="input-group">
            <span class="input-group-addon"><span class="glyphicon glyphicon-lock" aria-hidden="true"></span></span>
            <input type="password" class="form-control" placeholder="Verify Password" />
        </div><br />
        <div class="input-group">
            @Html.CheckBoxFor(model => model.AgreedToTerms, new { Class = "form-control" })
        </div><br />

        <input type="submit" name="Submit" class="btn btn-default" />
    }
</div>

单击注册表单上的“提交”后,我确实会进入 [HttpPost] 操作以创建帐户,但是从模型中收集的变量都包含空值。

任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 我不知道为什么它发布空值,但你会想要将你的 htmlAttributes 参数更改为小写,例如new { @class = "form-control", type = "password", placeholder = "Password" }
  • 可能发布空值,因为在您的控制器中您没有保存任何内容?你正在初始化,然后立即说return Redirect
  • @AgustinMeriles 他的动作方法可以命名相同,因为他的第一个Register ActionResultHttpGet,另一个Register ActionResultHttpPost
  • 调试时是否得到了预期的结果?
  • @BviLLe_Kid 我的错!我会删除评论

标签: c# asp.net asp.net-mvc asp.net-mvc-5 viewmodel


【解决方案1】:

用户帐户不正确。像这样编辑它

【讨论】:

  • 我什至没有想到 getset 访问器。固体拾取
  • 是的。接得好。我很惊讶我经常看到这样做,但我仍然没有想到去寻找它。我想我已经习惯了看到属性,我的大脑只是在{ get; set; } 中进行替换,即使它们不存在。
  • @MrDKOz:您目前拥有的称为“字段”,“属性”具有 getter 和 setter,即使它们只是自动实现的。只有属性有资格被绑定。
  • 这很好,谢谢!还要感谢@Chris Pratt 的解释。
猜你喜欢
  • 2015-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 2016-08-18
相关资源
最近更新 更多