2012-10-30 4 views
2

반복되는 부분이 많은 MVC3 웹 사이트의 양식이 있습니다. 그래서 저는 이것을 도우 려했습니다. 예제 양식을 따라 인터넷을 만들었습니다.표준 헬퍼를 사용하여 사용자 정의 도우미로보기에서 "유형 인수를 사용법에서 추론 할 수 없습니다"

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"> 

이 포함되어 있는지 확인했다. similair를 사용하지만 표준 도우미를 사용하지 않는 다른 도우미가 올바르게 작동합니다. 나는 또한 이것을 시도했다 :

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

이것은 "암시 적으로 'string'유형을 'string []'로 변환 할 수 없다는 오류를줍니다.

나는 비슷한 질문을 보았지만 답을 찾을 수 없었습니다. 그래서 내가 뭘 잘못하고 있니?

답변

1

왜 속성 배열을 가져 옵니까? 비열한 약간의 오류가

Expression<Func<TModel, TProperty>> expression, 
+0

아 젠장으로

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

이 줄을 변경하는 방법

. 나는 그것을 완전히 읽었다. 나는이 일에 대해 눈이 멀어지는 것을 보았다. 그것은 실제로'@ (Html.FormLine (model => model.FirstName)) '을 사용하여 작동합니다. 고마워요! – PeterB

+0

그리고 이제는 다음과 같이 작동합니다 :'@ Html.FormLine (model => model.FirstName)' – PeterB