我的MVC 5项目正在使用Facebook登录。在 AccountController.cs 中的ExternalLoginCallback(string returnUrl)
内部,我解析Facebook响应以获取姓名,生日和电子邮件,然后将这些值推送到修改后的ExternalLoginConfirmationViewModel
。这是正常的, ExternalLoginConfirmation.cshtml 中的Model
包含的值可以正确显示。
我的 ExternalLoginConfirmation.cshtml :
@model itssamsbirthday.Models.ExternalLoginConfirmationViewModel
@{
ViewBag.Title = "Finalize Account";
}
<h2>Hello @Model.FirstName!</h2>
<h3>You've successfully authenticated with <strong>@ViewBag.LoginProvider</strong>.</h3>
@using (Html.BeginForm("ExternalLoginConfirmation", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
<h4>Finalize your account below.</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<p class="text-info">
Your profile:
<div><strong>First Name</strong>: @Model.FirstName</div>
<div><strong>Last Name</strong>: @Model.LastName</div>
<div><strong>Email</strong>: @Model.Email</div>
<div><strong>Birthday</strong>: @String.Format("{0:M/d/yyyy}", Model.BirthDate)</div>
</p>
<div class="text-info">
Select the <strong>Birthday Cake</strong> that best represents you:
</div>
<div class="form-group">
@Html.LabelFor(m => m.ProfileCake, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(m => m.ProfileCake, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(m => m.ProfileCake, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-2">
<input type="submit" class="btn btn-default" value="Lets Party!" />
</div>
</div>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
我的问题是,由于其他值(FirstName,LastName,Email,BirthDate)未使用表单组中的@Html.EditorFor(...)
进行明确设置,因此传递给方法{{1}的model
在值设置为ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)
的情况下无效。我是HTML和MVC 5的新手,我不知道如何在不创建自动生成的Html表单的情况下自动将null
的值传递给Model
。我想解决方案非常简单,但我无法弄清楚。我希望新用户选择model
但其他所有内容都会自动传递。
答案 0 :(得分:2)
只需为要传递的模型值添加隐藏输入:
@Html.HiddenFor(m => m.FirstName)