MVC3 Razor ViewData

gev*_*jen 0 razor asp.net-mvc-3

我有一个在线表格.例如,它要求名字和姓氏.当他们提交时,我将他们发送到另一个视图.第二个视图还有一些文本框(密码,电子邮件地址,用户名),但它也有名字和姓氏.如果他们填写第一个表格并填写名字/姓氏,我希望第二个表格显示这些值,因为他们已经填写了.

在第一种形式中,我将所有填写的信息放入TempData ["entry"]

在第二种形式我正在做这个检查.

        if (TempData["entry"] != null)
        {
            var _model = (AccountInformationModel)TempData["entry"];

            ViewData["_firstName"] = _model.NameFirst;
            ViewData["_lastName"] = _model.NameLast;
        }

        return View("Register");
Run Code Online (Sandbox Code Playgroud)

我想在我看来,我对如何在文本框中显示这些数据感到困惑.在我看来,我有这个,但它似乎没有工作.

       <div class="editor-label">
            @Html.LabelFor(m => m.FirstName)
        </div>
        <div class="editor-field">
            @Html.TextBox("FirstName", ViewData["FirstName"])
            @Html.ValidationMessageFor(m => m.FirstName)
        </div>
Run Code Online (Sandbox Code Playgroud)

显然是......

   @Html.TextBox("FirstName", ViewData["FirstName"])
Run Code Online (Sandbox Code Playgroud)

不工作..

Bra*_*don 9

您将值分配给"_firstName"

ViewData["_firstName"] = _model.NameFirst;
Run Code Online (Sandbox Code Playgroud)

然后尝试显示"FirstName"

@Html.TextBox("FirstName", ViewData["FirstName"])
Run Code Online (Sandbox Code Playgroud)

尝试将其更改为:

@Html.TextBox("FirstName", ViewData["_firstName"])
Run Code Online (Sandbox Code Playgroud)

另一种方法是避免这样的错误,即定义一个包含所有视图数据键的新类.这样,您的字符串就包含在一个位置,从而使维护和更改变得更容易.

public static class ViewDataKeys
{
    public const string FirstName = "_firstName";
}
Run Code Online (Sandbox Code Playgroud)

然后,当您想要访问它时,您可以使用

ViewData[ViewDataKeys.FirstName] = _model.NameFirst;
Run Code Online (Sandbox Code Playgroud)