C# 如何将ViewBag项目放入文本框中?
我有以下代码,我得到一个错误,说:C# 如何将ViewBag项目放入文本框中?,c#,C#,我有以下代码,我得到一个错误,说: has no applicable method named 'TextBoxFor' but appears to have an extension method by that name. 我的代码: @Html.TextBoxFor(ViewBag.taglist) 必须使用lambda表达式来选择属性,此外还必须将ViewBag成员强制转换为正确的类型 @Html.TextBoxFor(model => (string)ViewBag
has no applicable method named 'TextBoxFor' but appears to have an extension method by that name.
我的代码:
@Html.TextBoxFor(ViewBag.taglist)
必须使用lambda表达式来选择属性,此外还必须将ViewBag成员强制转换为正确的类型
@Html.TextBoxFor(model => (string)ViewBag.taglist)
必须使用lambda表达式来选择属性,此外还必须将ViewBag成员强制转换为正确的类型
@Html.TextBoxFor(model => (string)ViewBag.taglist)
为什么不在视图中使用强类型模型而不是
ViewBag
。这会让你的生活更轻松
事实上,您必须使用一个模型来使用TextBoxFor
,否则它将无法工作。请参见的定义-作为第二个参数,它采用lambda表达式,该表达式采用模型的属性形式
如果只需要一个文本框,有两个选项:
@Html.TextBox("NameOfTheTextbox", (String)ViewBag.SomeValue)
还是走
<input type="text" value="@ViewBag.SomeValue" />
不需要复杂的解决方案 为什么不在视图中使用强类型模型而不是
ViewBag
。这会让你的生活更轻松
事实上,您必须使用一个模型来使用TextBoxFor
,否则它将无法工作。请参见的定义-作为第二个参数,它采用lambda表达式,该表达式采用模型的属性形式
如果只需要一个文本框,有两个选项:
@Html.TextBox("NameOfTheTextbox", (String)ViewBag.SomeValue)
还是走
<input type="text" value="@ViewBag.SomeValue" />
不需要复杂的解决方案 我同意使用强类型模型的其他建议,因为编译时错误支持比调试异常要好得多。话虽如此,为了做你想做的事,你可以使用以下方法:
@Html.TextBox("NameOfTextBox", (string)ViewBag.taglist)
更新:一个简单的例子
既然您已经在评论中提供了一些细节,那么为了提供一个简单的例子,我猜测一下您可能在做什么
我假设您有一个标签列表(每个问题都有),您希望在文本框中整齐显示,每个标签之间用空格分隔。我将假设您的标记
域模型如下所示:
public class Tag
{
public int Id { get; set; }
public string Description { get; set; }
}
public ActionResult Index()
{
using (YourContext db = new YourContext())
{
var model = new SomeViewModel();
model.Tags = string.Join(" ", db.Tags.Select(t => t.Description).ToList());
return View(model);
}
}
现在,您的视图将需要一个标记列表,但可能还需要显示一些其他信息。但是,让我们只关注标签。以下是表示所有标记的视图模型,其中考虑到您希望在文本框中将它们显示为字符串:
public class SomeViewModel
{
public string Tags { get; set; }
// Other properties
}
为了获得所需的数据,您可以抓取所有标签,如下所示:
public class Tag
{
public int Id { get; set; }
public string Description { get; set; }
}
public ActionResult Index()
{
using (YourContext db = new YourContext())
{
var model = new SomeViewModel();
model.Tags = string.Join(" ", db.Tags.Select(t => t.Description).ToList());
return View(model);
}
}
注意我是如何直接将模型
传递到视图的
现在的观点非常简单:
@model SomeViewModel
@Html.EditorFor(m => m.Tags)
model
指令表示视图是强类型的。这意味着此视图将期望接收SomeViewModel
的实例。正如您可以从上面我的操作代码中看到的,我们将提供此视图所需的类型。这现在允许我们使用强类型的HtmlHelper
(即Html.XxxFor
)方法
在本例中,我使用了
Html.EditorFor
,因为它将选择适当的输入元素来呈现数据。(在这种情况下,因为说明
是一个字符串
,它将呈现一个文本框。)我同意使用强类型模型的其他建议,因为编译时错误支持比调试异常要好得多。话虽如此,为了做你想做的事,你可以使用以下方法:
@Html.TextBox("NameOfTextBox", (string)ViewBag.taglist)
更新:一个简单的例子
既然您已经在评论中提供了一些细节,那么为了提供一个简单的例子,我猜测一下您可能在做什么
我假设您有一个标签列表(每个问题都有),您希望在文本框中整齐显示,每个标签之间用空格分隔。我将假设您的标记
域模型如下所示:
public class Tag
{
public int Id { get; set; }
public string Description { get; set; }
}
public ActionResult Index()
{
using (YourContext db = new YourContext())
{
var model = new SomeViewModel();
model.Tags = string.Join(" ", db.Tags.Select(t => t.Description).ToList());
return View(model);
}
}
现在,您的视图将需要一个标记列表,但可能还需要显示一些其他信息。但是,让我们只关注标签。以下是表示所有标记的视图模型,其中考虑到您希望在文本框中将它们显示为字符串:
public class SomeViewModel
{
public string Tags { get; set; }
// Other properties
}
为了获得所需的数据,您可以抓取所有标签,如下所示:
public class Tag
{
public int Id { get; set; }
public string Description { get; set; }
}
public ActionResult Index()
{
using (YourContext db = new YourContext())
{
var model = new SomeViewModel();
model.Tags = string.Join(" ", db.Tags.Select(t => t.Description).ToList());
return View(model);
}
}
注意我是如何直接将模型
传递到视图的
现在的观点非常简单:
@model SomeViewModel
@Html.EditorFor(m => m.Tags)
model
指令表示视图是强类型的。这意味着此视图将期望接收SomeViewModel
的实例。正如您可以从上面我的操作代码中看到的,我们将提供此视图所需的类型。这现在允许我们使用强类型的HtmlHelper
(即Html.XxxFor
)方法
在本例中,我使用了
Html.EditorFor
,因为它将选择适当的输入元素来呈现数据。(在这种情况下,因为Description
是一个string
,它将呈现一个文本框。)如果不在视图中明确设置模型的类型,则不能使用Html.TextBoxFor
。如果不指定类型,则默认为dynamic
。如果要进行模型绑定,则必须使用显式类型,而不是像ViewBag
这样的动态类型。要使用Html.TextBoxFor
,必须定义一个模型类型,该模型类型定义要绑定的属性。否则,您必须使用Html.TextBox
并从ViewBag
手动设置值。正如其他人所说,如果您使用静态类型的模型并利用内置的MVC模型绑定,您的生活将变得更加轻松。如果不在视图中明确设置模型的类型,则无法使用Html.TextBoxFor
。如果不指定类型,则默认为dynamic
。如果要进行模型绑定,则必须使用显式类型,而不是像ViewBag
这样的动态类型。要使用Html.TextBoxFor
,必须定义一个模型类型,该模型类型定义要绑定的属性。否则,您必须使用Html.TextBox
并从ViewBag
手动设置值。作为