我是新手,如果这不够解释,请见谅。我想在 asp.net mvc 3 中的表单中预填充一个字段。
@Html.TextBox("CompName", null, new { @value = ViewBag.CompName })
但是当我想用一个值预填充它并将该值发送到我的模型时,就像这样;
@Html.TextBoxFor(model => model.Comps.CompName, null, new { @value = ViewBag.CompName })
它不会工作。有任何想法吗?
提前致谢!
最佳答案
因此,我建议改用 View 模型而不是 ViewBag。我在我的项目中创建了一个名为 ViewModels 的文件夹,然后在那里创建了一些适当的子文件夹,用于放置我的各种 View 模型。
如果您像这样创建一个 View 模型类:
public class MyViewModel
{
public string CompName { get; set; }
}
然后在您的 Controller 操作中,您可以创建其中一个并填充它,可能来自从数据库中提取的某些现有模型。通过设置
CompName
viewmodel 中的属性,它将在您的 View 中具有该值。然后你的 View 看起来像这样:@model MyNamespace.ViewModels.MyViewModel
@Html.EditorFor(model => model.CompName)
或
@Html.TextBoxFor
也会工作。然后回到你对帖子的 Controller 操作,你有这样的东西:
[HttpPost]
public ActionResult MyAction(MyViewModel viewModel)
{
...
// do whatever you want with viewModel.CompName here, like persist it back
// to the DB
...
}
可能是您使用 automapper 之类的东西来映射您的模型和 View 模型,但您当然也可以手动完成,尽管整个左手/右手的事情变得非常乏味。
如果你这样做,事情就会变得容易得多,而且根本没有多少工作。
更新
但是,如果您真的想在 ViewBag 中传递该值,您可以这样做:
在您的 Controller 操作中:
ViewBag.CompName = "Some Name";
那么在你看来:
@Html.TextBoxFor(model =>model.Comps.CompName, new {@Value = ViewBag.CompName})
这将使用“Some Name”预先填充文本框。
我仍然会使用 viewmodel 方法,但这似乎工作得很好。希望有帮助!
关于asp.net-mvc-3 - 在 asp.net mvc 3 中预填充 Html.TextBoxFor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7337520/