2015-02-23 51 views
1

我對MVC相當陌生,但自從1.1以來一直使用.NET。我有這個非常混亂的問題,我不明白我做錯了什麼。它與創建我自己的HtmlHelper類有關。無法讓我的MVC擴展HtmlHelper類正常工作(錯誤:嘗試明確指定類型參數)

  • 我正在MVC 5.1
  • 剃刀
  • 我檢查了web.config文件看起來創建一個測試項目
  • 我重新發行一個完全新的項目是正確的,使確保沒有錯的一個,我一直在

工作我使用以下指南:http://patrickdesjardins.com/blog/inline-razor-helper-instead-of-html-helper-for-you-asp-net-mvc-website

我已經基本上按行進行了。

這是來自我的測試項目。這是我在App_Code文件夾中的助手類。

namespace Test2.MyHtmlHelper 
{ 
    public static class HtmlExtensions 
    { 
     public static MvcHtmlString TestEditorFor(this HtmlHelper htmlHelper, string expression) 
     { 
      return new MvcHtmlString("test"); 
     } 

     public static MvcHtmlString TestHelperFor<TModel, TProperty>(this HtmlHelper htmlHelper, Expression<Func<TModel, TProperty>> expression) 
     { 
      return new MvcHtmlString("test2"); 
     } 
    } 
} 

這是我CSHTML:

@model Test2.Area 
@using Test2.MyHtmlHelper 

@using (Html.BeginForm()) 
{ 
    <div class="form-horizontal"> 
     <div class="form-group"> 

       @Html.EditorFor(model => model.name, new { htmlAttributes = new { @class = "form-control" } }) 

       @Html.TestEditorFor("test") @*--works*@ 
       @Html.TestEditorFor(model => model.Name) @*--error*@ 
       @Html.TestHelperFor(b => b.name) @*--error*@ 

     </div> 
    </div> 
} 

所以兩個問題。第一個是與下面的代碼行:

@ Html.TestHelperFor(B => b.name)

The type arguments for method 'Test2.MyHtmlHelper.HtmlExtensions.YourGenericHelperFor<TModel,TProperty>(System.Web.Mvc.HtmlHelper, System.Linq.Expressions.Expression<System.Func<TModel,TProperty>>)' cannot be inferred from the usage. Try specifying the type arguments explicitly. 

我認爲這反映是應該自動地發現這一點,所以你不」不得不明確地輸入參數。它甚至在指南中這樣說:「正如你所看到的,Html Helper不知道模型類是如何構建的,它只是知道它通過參數表達一個表達式,我們將通過反射該屬性及其值「。

第二個問題是,只要我用我的幫助器方法引用模型的lambda表達式,就沒有參考。使用@ Html.TestEditorFor(model => model.Name),當我檢查模型上的智能感知時,它會顯示「(參數)?模型」。但與@ Html.EditorFor它說「區域模型」,這是正確的。我想這與我的方法有關,不知道接受什麼,但是再一次,如果不能自動處理?

感覺像一個noob,但已經花了一個下午試圖解決這個問題,我即將放棄現在,只是解決它。

+0

看來你的鏈接斷開(找不到網頁)「我使用以下指南:」 – sakir 2015-02-23 19:07:16

+0

謝謝。鏈接更新爲正確的一個:http://patrickdesjardins.com/blog/inline-razor-helper-instead-of-html-helper-for-you-asp-net-mvc-website – Sami 2015-02-23 19:26:58

回答

1
@Html.TestEditorFor(model => model.Name) @*--error*@ 

期待一個字符串值,而不是一個表達

@Html.TestHelperFor(b => b.name) @*--error*@ 

不應被這個b.Name代替b.name?

3

這對我的作品

public static class HtmlExtensions 
{ 
    public static MvcHtmlString TestEditorFor(this HtmlHelper htmlHelper, string expression) 
    { 
     return new MvcHtmlString("test"); 
    } 

    public static MvcHtmlString TestHelperFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, 
     Expression<Func<TModel, TProperty>> expression) 
    { 
     return new MvcHtmlString("test2"); 
    } 
} 



@Html.EditorFor(model => model.name, new { htmlAttributes = new { @class = "form-control" } }) 
     @Html.TestEditorFor("test") 
     @Html.TestHelperFor(model => model.name) 
     @Html.TestHelperFor(b => b.name) 
相關問題