.NET TextBox TextArea String prepopulate

时间:2018-01-24 14:48:04

标签: c# asp.net .net asp.net-mvc

这有效:

@Html.TextBox("body", ViewData["body"], new { @class = "form-control" })

尽管如此:

@Html.TextArea("body", ViewData["body"], new { @class = "form-control" })

返回此错误:

  

CS1503:参数3:无法转换为'对象'到'字符串'

显然它与文本区域有关,但为什么呢?

2 个答案:

答案 0 :(得分:1)

TextArea重载将字符串值作为第二个参数。

public static MvcHtmlString TextArea(
    this HtmlHelper htmlHelper,
    string name,
    string value,
    object htmlAttributes
)

表达式ViewData["body"]返回object,而不是字符串。您需要将ViewData["body"]显式转换为字符串并将其作为参数传递。您可以使用as运算符进行安全投射。

@Html.TextArea("body",ViewData["body"] as string, new { @class = "form-control" })

适用于TextBox助手,因为TextBox重载为值参数采用object类型。

public static MvcHtmlString TextBox(
    this HtmlHelper htmlHelper,
    string name,
    object value,
    IDictionary<string, object> htmlAttributes
)

答案 1 :(得分:0)

ViewData是一组对象。 textarea重载需要一个字符串。如果您的视图数据项是字符串,则将其转换为字符串。

@Html.TextArea("body", ViewData["body"].ToString(), new { @class = "form-control" })

或者它是一个复杂的对象,然后转换为对象并引用所需的属性..再次转换为字符串不是一个字符串。

@Html.TextArea("body", ((MyObject)ViewData["body"]).MyProperty.ToString(), new { @class = "form-control" })

希望有所帮助。

相关问题