部分视图中的Html.TextareaFor C#

时间:2016-06-16 22:18:44

标签: c# lambda html-helper

在我们的应用程序中,我们使用HtmlHelpers和部分视图来创建组件。对于Commentbox组件,如何使用给定的模型属性生成文本框? 下面的代码是圣杯,但是会出现一些错误。

代码(简化)

/Views/Comment.cshtml(页面)

public static MvcHtmlString FormTextbox<TModel, TProperty>( this HtmlHelper<TModel > htmlHelper,
       Expression<Func <TModel , TProperty >> CommentboxExpression, CommentboxViewModel model = null)
{
    if (model == null) { model = new CommentboxViewModel(); }
    model.ModelItem = CommentboxExpression;
    return htmlHelper.Partial( "Components/Commentbox", model);
}

/Extensions/HtmlHelper.cs(中间帮助者)

namespace ViewModels.Components
{
    public class CommentboxViewModel
    {
        public LambdaExpression ModelItem { get; set; }
    }
}

/ViewModels/Components/CommentboxViewModel.cs(ViewModel)

@model ViewModels.Components.CommentboxViewModel
@Html.TextAreaFor(Model.ModelItem)
@Html.ValidationMessageFor(Model.ModelItem)

/Components/Commentbox.cshtml(组件局部视图)

@Html.TextAreaFor(m => m.ModelItem)

什么行不通:

  • @Html.TextAreaFor(Model.ModelItem)(在部分视图中) - &gt;将“m =&gt; m.ModelItem”作为值放入textarea框
  • @Html.TextArea()(在部分视图中) - &gt;给出“方法的类型参数'System.Web.Mvc.Html.InputExtensions.TextAreaFor(System.Web.Mvc.HtmlHelper,System.Linq.Expressions.Expression&gt;)'无法从用法中推断出来。尝试指定类型参数明确。“

什么有效:

  • 它使用@Html.ValidationMessageFor(),但您需要手动添加验证属性。
  • 它在ViewModel上生成@Html.TextAreaFor(Model.ModelItem)作为MvcHtmlString时有效,但我们希望在局部视图中保留尽可能多的渲染,并可能嵌套组件。

问题

如何让{{1}}在局部视图中工作,以便呈现文本框,包括所有验证属性?

0 个答案:

没有答案