在我们的应用程序中,我们使用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()
,但您需要手动添加验证属性。@Html.TextAreaFor(Model.ModelItem)
作为MvcHtmlString时有效,但我们希望在局部视图中保留尽可能多的渲染,并可能嵌套组件。问题
如何让{{1}}在局部视图中工作,以便呈现文本框,包括所有验证属性?