Dan*_*Dan 6 razor asp.net-mvc-3
我是新来的,如果这还不够解释,请道歉.我想在asp.net mvc 3中预填充表单中的字段.
@Html.TextBox("CompName", null, new { @value = ViewBag.CompName })
Run Code Online (Sandbox Code Playgroud)
但是当我想用一个值预先填充它并将该值发送给我的模型时,就像这样;
@Html.TextBoxFor(model => model.Comps.CompName, null, new { @value = ViewBag.CompName })
Run Code Online (Sandbox Code Playgroud)
它不会起作用.有任何想法吗?
提前致谢!
its*_*att 15
所以,我建议转向使用viewmodels而不是ViewBag.我在我的项目中创建了一个名为ViewModels的文件夹,然后在那里根据需要制作一些子文件夹,我放置了各种视图模型.
如果您创建一个viewmodel类,如下所示:
public class MyViewModel
{
public string CompName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后在您的控制器操作中,您可以创建其中一个并填充它,可能来自从数据库中提取的某个现有模型.通过CompName在viewmodel中设置该属性,它将在您的视图中具有该值.然后你的视图看起来像这样:
@model MyNamespace.ViewModels.MyViewModel
@Html.EditorFor(model => model.CompName)
Run Code Online (Sandbox Code Playgroud)
或者@Html.TextBoxFor也会工作.
然后回到你的控制器动作的帖子,你有这样的事情:
[HttpPost]
public ActionResult MyAction(MyViewModel viewModel)
{
...
// do whatever you want with viewModel.CompName here, like persist it back
// to the DB
...
}
Run Code Online (Sandbox Code Playgroud)
可能是你使用像automapper这样的东西来映射模型和视图模型,但你也可以手动完成,尽管整个左手/右手的东西变得相当繁琐.
如果你这样做会让事情变得更容易,而且根本没有多少工作.
更新
但是,如果你真的想在ViewBag中传递该值,你可以这样做:
在您的控制器操作中:
ViewBag.CompName = "Some Name";
Run Code Online (Sandbox Code Playgroud)
然后在你看来:
@Html.TextBoxFor(model =>model.Comps.CompName, new {@Value = ViewBag.CompName})
Run Code Online (Sandbox Code Playgroud)
并且这将使用"Some Name"预先填充文本框.
我仍然采用viewmodel方法,但这似乎运作良好.希望有所帮助!
| 归档时间: |
|
| 查看次数: |
37703 次 |
| 最近记录: |