2011-03-23 55 views
0

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

第一种形式我将所有填写的信息放入TempData [条目“]

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

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

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

     return View("Register"); 

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

 <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> 

清楚这行...

@Html.TextBox("FirstName", ViewData["FirstName"]) 

不工作..

+0

只是好奇,为什么不把模型包含姓和名的实例传递给你的第二个视图,然后使用'@ Html.TextBoxFor(m => m.FirstName)'? – 2011-03-23 19:37:06

+0

@adrift ...刚试过你的建议,它完美的作品..我喜欢这里的两个想法...但你的似乎利用mvc的想法很不错...感谢您的建议! – gevjen 2011-03-23 20:16:51

回答

9

你指定的值设置为 “_FirstName”

ViewData["_firstName"] = _model.NameFirst; 

然后尝试显示“名字”

@Html.TextBox("FirstName", ViewData["FirstName"]) 

尝试将其更改为:

@Html.TextBox("FirstName", ViewData["_firstName"]) 

另一种方式来做到这一点,以避免错误这样是定义一个新的类,它包含所有视图的数据项。这样你的字符串被包含在一个位置,使维护和更改变得更加容易。

public static class ViewDataKeys 
{ 
    public const string FirstName = "_firstName"; 
} 

然后,当你要访问它,你可以使用

ViewData[ViewDataKeys.FirstName] = _model.NameFirst; 
+0

布兰登......谢谢..愚蠢的错误。很高兴有另一套眼睛我猜,我在正确的轨道上。 – gevjen 2011-03-23 19:26:04

+0

@gevjen,没问题。作为一个附注,你可能想要考虑使用常量而不是字符串来避免这样的错误。 – Brandon 2011-03-23 19:28:11

+0

@brandon ......从来没有做过这件事,也没有听说过它,但是如果你有任何链接文献请传递它,谢谢! – gevjen 2011-03-23 19:30:20