2015-09-30 67 views
1

我想在幫助剃刀功能,例如使用BeginForm。如何在自定義的HTML幫助器中使用內置的HTML幫助器?

@helper Modal(string name) 
{ 
<div id="@name"> 

    @using (Html.BeginForm("Add", "User", FormMethod.Post)) { 
     <fieldset> 
      @Html.Label("Name") 
      @Html.TextBox("Name", new { @class = "text ui-widget-content ui-corner-all" }) 
      @Html.Label("Email") 
      @Html.TextBox("Email", new { @class = "text ui-widget-content ui-corner-all" }) 

      <input type="submit" tabindex="-1" style="position:absolute; top:-1000px"> 
     </fieldset> 
    } 
</div> 
} 

但是我得到一個錯誤:

@MyHelper.Modal("dialog-form") 

這是由於HTML ...標記,沒有它,它顯然能正常工作,只有HTML。

我錯過了什麼讓它工作?

我已經添加@using System.Web.Mvc.Html;但它仍然不能識別FormMethod。

回答

2

不幸的是,在App_Code文件夾中定義的聲明助手似乎繼承了System.Web.WebPages.HelperPage而不是System.Web.Mvc.WebViewPage,正常的cshtml文件從該文件繼承。

似乎該幫助頁面也有一個Html屬性,但它是空的。

但是,您似乎可以通過PageContext.Page訪問所有這些幫助者。您還需要添加一些使用語句(位於視圖文件夾中的web.config中的所有命名空間),以便您可以訪問重要的擴展方法,如Html.BeginForm

下面是一個簡單的演示代碼:

@using System.Web.Mvc 
@using System.Web.Mvc.Routing 
@using System.Web.Mvc.Html 
@using System.Web.Mvc.Ajax 
@using System.Web.Mvc.Razor 
@using System.Web.Optimization 

@helper MyCustomHelper() 
{ 
    var wvp = PageContext.Page as System.Web.Mvc.WebViewPage; 

    var Html = wvp.Html; 
    var Ajax = wvp.Ajax; 
    var Url = wvp.Url; 
    var ViewBag = wvp.ViewBag; 

    // ... Helper code goes here ... 

    @using (Html.BeginForm("Add", "User", FormMethod.Post)) 

    @Ajax.BeginForm ... 

    @Url.Action ... 

    // ... 
} 

希望這有助於。

+0

@Victor表格標記不起作用,例如。 Html.BeginFrom,Ajax.BeginForm,Html.TextBox。我使用的是Umbraco 7,但是標記在umbraco視圖中可以正常工作,但它不適用於幫助程序。 – nickornotto