创建使用asp.Identity预先填充一些数据并为db创建新条目的表单

时间:2015-04-12 16:38:14

标签: c# asp.net-mvc html5 razor

我有一个正在使用ASP.Identity创建新用户的网站。我有一个辅助表,其中包含更多用户信息,我希望在帐户注册后填充该信息。由于我已经拥有了id和电子邮件,我不需要再次要求这些,但是无法通过Create Razor页面获取第二个表单来传递数据,即使它显示在表单本身上。

当我提交“需要登录ID”时,我收到一条错误消息,那么如何让表单以userLoginId的值发布?

创建页面

var userLoginId = User.Identity.GetUserId();

<div class="form-horizontal">
    <h4>nrLogins</h4>
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form-group">
        @Html.LabelFor(model => model.LoginID, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => userLoginId, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => userLoginId, "", new { @class = "text-danger" })
        </div>
    </div>

的LoginController

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "LoginID,Email,FirstName,LastName,DateOfBirth,Address1,Address2,Address3,Address4,Address5,PostCode,PhoneMobile,PhoneOther,UserSearchable,SiteRoleType,AccountActive,AccountCreatedDate,AccountEditedDate,AccountDeletedDate")] dbLogin dbLogin)
    {
        if (ModelState.IsValid)
        {
            db.dbLogins.Add(dbLogin);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(dbLogin);
    }

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要为控件指定name属性,否则默认为您的变量名称userLoginId而不是LoginId,因此您可以执行以下操作:

@Html.EditorFor(model => userLoginId, null, "LoginId", new { htmlAttributes = new { @class = "form-control" } })

如果您不希望用户能够查看或编辑详细信息,您可以将其作为隐藏字段传递

@Html.Hidden("LoginId", userLoginId)