如何将ExternalLoginConfirmation Model值传递给提交的模型

时间:2015-05-18 03:39:19

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

我的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但其他所有内容都会自动传递。

1 个答案:

答案 0 :(得分:2)

只需为要传递的模型值添加隐藏输入:

@Html.HiddenFor(m => m.FirstName)