2

繰り返し部分が多いMVC3 Webサイト用のフォームがいくつかあります。だから私はこれのためのヘルパーを作ろうとしました。インターネットの例に従って、私はこれを作りました:

using System;
using System.Linq.Expressions;
using System.Web.Mvc;
using System.Web.Mvc.Html;
using System.Web.Routing;

namespace Nop.Web.Themes.MyTheme.Extensions
{
    public static class FormLineHelper
    {
        public static MvcHtmlString FormLine<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
                                                                    Expression<Func<TModel, TProperty[]>> expression,
                                                                    object htmlAttributes = null)
        {
            TagBuilder tag = new TagBuilder("tr");
            tag.MergeAttributes(new RouteValueDictionary(htmlAttributes), true);
            var member = (MemberExpression)expression.Body;
            string propertyName = member.Member.Name;

            tag.InnerHtml += String.Format("<td class='label'>{0}</label></td><td class='field'>{1}</td><td class='padding'>{2}</td>",
               htmlHelper.LabelFor(expression), htmlHelper.EditorFor(expression), htmlHelper.ValidationMessageFor(expression));

            return MvcHtmlString.Create(tag.ToString());
        }
    }
}

これは問題なくコンパイルされます。しかし、私がするとき

@model Nop.Plugin.MyPlugin.Models.ViewModel

@{
    Layout = "../Shared/_Root.cshtml";
}

<div class="form">
<div class="form-top"></div>
<div class="form-center">

@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <table>
    @Html.FormLine(model => model.FirstName)
   </table>
}
</div>
<div class="form-bottom"></div>
</div>

web.configに含まれていることを確認しました

<compilation debug="true" targetFramework="4.0">

「使用法から型引数を推測できません」というエラーが表示されます。同様に機能するが、標準のヘルパーを使用しない別のヘルパーは正常に機能します。私もこれを試しました:

@{ Html.FormLine<ViewModel, string>(model => model.FirstName); }

これにより、「タイプ 'string' を 'string[]' に暗黙的に変換できません」というエラーが発生します。

類似の質問を見たことがありますが、答えを見つけることができませんでした。それで、私は何を間違っていますか?

4

1 に答える 1

1

なぜプロパティの配列を取得するのですか?

この行を変更する方法:

Expression<Func<TModel, TProperty[]>> expression,

Expression<Func<TModel, TProperty>> expression,
于 2012-10-30T12:34:29.443 に答える