2013-08-05 63 views
0

我正在研究ASP.NE MVC4,我正在使用LungoJS庫進行開發。如何從助手調用動作並避免渲染?

我正在開發一個幫助器,以我需要的方式渲染LungoJS控件。

對於選擇輸入,我想要得到一個包含每個選項數據的JSON。

我可以從現有控制器的操作中獲取所需的JSON。

但是當我打電話從助手的作用,視圖渲染我一個<pre>標籤內的HTML :-(

查看

<div class="form" id="address-data"> 

     @Html.LungoInputFor(m => m.CaseServiceCaseModel.CaseAddressModel.AddressDataModel.TerritoryId, "text", @Labels.Territory, @htmlAttributesRO, true) 
     @Html.LungoSelectFor(m => m.CaseServiceCaseModel.CaseAddressModel.AddressDataModel.TerritoryId, @Labels.Territory, null, true, "GetTerritoryKendo", "Address") 

助手

public static MvcHtmlString LungoSelectFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string label = "", object htmlAttributes = null, bool fieldset = false, string action = "", string controller = "") 
    { 
     TagBuilder tag = new TagBuilder("select"); 
     JavaScriptSerializer js = new JavaScriptSerializer(); 

     MvcHtmlString data = ChildActionExtensions.Action(html, action, controller); 
     object[] json = js.Deserialize<object[]>(data.ToString()); 

     foreach (Dictionary<string,object> item in json) 
     { 
      foreach (var property in item) 
      { 
       TagBuilder option = new TagBuilder("option"); 
       switch (property.Key) 
       { 
        case "Selected": 
         if ((bool)property.Value) 
         { 
          option.MergeAttribute("selected","selected"); 
         } 
         break; 
        case "Text": 
         option.InnerHtml = property.Value.ToString(); 
         break; 
        case "Value": 
         option.MergeAttribute("value", property.Value.ToString()); 
         break; 
        default: 
         break; 
       } 
       tag.InnerHtml += option.ToString(TagRenderMode.Normal); 
      } 
     } 

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

我不理解爲什麼如果我從變量中獲取Action中的htmlstring,並且在我僅返回Select輸入html之後,將影響整個頁面...如果我評論ChildActionExtensions.Action(html, action, controller)視圖呈現良好(但沒有我需要的內容...)

回答

0

您不應該在此使用子操作(ChildActionExtensions.Action幫助器),因爲它們直接寫入響應。你可以做的是在你的視圖模型中包含一個屬性,它將包含你需要的集合,並直接將它作爲參數傳遞給你的幫助器。或者(但這不是一個好的解決方案)就是在助手中調用你的DAL來檢索列表。