因此,我建议使用视图模型而不是 ViewBag。我在我的项目中创建了一个名为 ViewModels 的文件夹,然后在其中根据需要创建一些子文件夹,其中放置了各种视图模型。
如果您像这样创建一个视图模型类:
public class MyViewModel
{
public string CompName { get; set; }
}
那么在您的控制器操作中,您可以创建其中一个并填充它,可能来自从数据库中提取的某些现有模型。通过在视图模型中设置CompName
属性,它将在视图中具有该值。然后您的视图可能看起来像这样:
@model MyNamespace.ViewModels.MyViewModel
@Html.EditorFor(model => model.CompName)
或者@Html.TextBoxFor
也可以使用。
然后在您的控制器动作中进行提交时,您会得到类似于以下代码:
[HttpPost]
public ActionResult MyAction(MyViewModel viewModel)
{
...
...
}
可能你正在使用像automapper这样的工具来映射你的模型和视图模型,但你也可以手动完成,虽然左右两边的事情会变得非常乏味。以这种方式做事情会使它更容易,并且几乎不需要太多工作。
更新
但是,如果你真的想在视图中传递那个值到ViewBag,你可以这样做:
在你的控制器操作中:
ViewBag.CompName = "Some Name"
那么在你的视图中:
@Html.TextBoxFor(model =>model.Comps.CompName, new {@Value = ViewBag.CompName})
这将使用 "Some Name" 预填充文本框。
我仍然会采用 ViewModel 方法,但这似乎足够好用。希望能对你有所帮助!