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
手动设置值。作为