asp.net-mvc-3 - 在 asp.net mvc 3 中预填充 Html.TextBoxFor

标签 asp.net-mvc-3 razor

我是新手,如果这不够解释,请见谅。我想在 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/

相关文章:

c# - 使用 T4MVC 在 RedirectToAction() 中传递一个对象

c# - 在带有 Telerik 的 Razor Web 帮助器中使用 html 帮助器

asp.net-mvc-3 - 对于 asp.net mvc3 Controller 来说,多少行代码太多了?

asp.net-mvc-3 - asp.net mvc3 创建一个将始终执行的 Controller 方法

asp.net-mvc - Razor View 中的 foreach 内的 foreach 不起作用

jquery - 加载 AJAX 的 PartialView 和非 AJAX 请求的 View

asp.net-mvc-4 - @Html.Raw 坚持对引号进行编码

asp.net - 重定向到操作不适用于 ASP.NET core

html - 在 Asp.Net 元素中为 google chrome 引用 .css 和 .js 文件

asp.net-mvc-3 - MVC 3 Razor EditorTemplate/DisplayTemplate 母版页