2015-08-26 40 views
0

我使用Html助手類來創建單選按鈕。它按照預期工作,但是當我嘗試添加自定義html屬性時,它不會添加到html中。無法使用html助手添加html屬性 - MVC 4

我期待的是: 我想創建4個單選按鈕,它們應該以獨佔的方式工作。

  1. 顯示所有的SAP業務項目之一
  2. 只顯示其UDF(U_WebItem = Y)值是」
  3. 顯示所有從下面選擇的項目組
  4. 件商品顯示所有的經營項目這些項目合作伙伴目錄 上述4個項目將是我的單選按鈕,只有一個會被選中,其餘全部將取消選擇。

從我的DB的一面,只有所謂的「ItemManagedBy」 W一個場軟管值是固定的(ALL,UDF,ITG & BPC)。根據值應該選擇正確的單選按鈕。

這裏是我的控制器方法:

Models.CRMSettings ReadCRMSettings(Tenant tenant) 
 
     { 
 
      Models.CRMSettings crmsetting = new Models.CRMSettings(); 
 
      CRMCommonDataContext db = new CRMCommonDataContext(General.COMMONConnectString); 
 
      var v =(from v1 in db.TenantSettings where v1.TenantID.Equals(tenant.TenantID) select v1).First(); 
 

 
      crmsetting.SaveCustomerAsInactive = v.SaveCustomerAsInactive.HasValue ? v.SaveCustomerAsInactive.Value : false; 
 
      crmsetting.SaveLeadAsInactive = v.SaveLeadAsInactive.HasValue ? v.SaveLeadAsInactive.Value : false; 
 

 
      crmsetting.SettingID = v.SettingID; 
 
      crmsetting.TenantID = v.TenantID.Value; 
 
      
 
      crmsetting.PurchaseItemManagedBy = v.PurchaseItemManagedBy; 
 
      crmsetting.SalesItemManagedBy = v.SalesItemManagedBy; 
 
      
 
      switch(crmsetting.SalesItemManagedBy) 
 
      { 
 
       case "ALL": 
 
        crmsetting.IsSalesItemManagedByAll=true; 
 
        break; 
 
       case "UDF": 
 
        crmsetting.IsSalesItemManagedByUDF = true; 
 
        break; 
 
       case "ITG": 
 
        crmsetting.IsSalesItemManagedByITG= true; 
 
        break; 
 
       case "BPC": 
 
        crmsetting.IsSalesItemManagedByBPC = true; 
 
        break; 
 
      } 
 
      switch (crmsetting.PurchaseItemManagedBy) 
 
      { 
 
       case "ALL": 
 
        crmsetting.IsPurchaseItemManagedByAll = true; 
 
        break; 
 
       case "UDF": 
 
        crmsetting.IsPurchaseItemManagedByUDF = true; 
 
        break; 
 
       case "ITG": 
 
        crmsetting.IsPurchaseItemManagedByITG = true; 
 
        break; 
 
       case "BPC": 
 
        crmsetting.IsPurchaseItemManagedByBPC = true; 
 
        break; 
 
      } 
 
}

@model saasCRM.Models.CRMSettings 
 

 
    @{ 
 
     Layout = null; 
 
     var htmlAttrib = new Dictionary<string, object>(); 
 
     htmlAttrib.Add("name", @Model.RadioGroup); 
 
     htmlAttrib.Add("binding", "true"); 
 
     htmlAttrib.Add("datamember", "Response>Data"); 
 
    } 
 

 
     <table style="width:100%;border:1px solid red"> 
 
     @{ 
 
      <tr> 
 
      <td> 
 
       @Html.RadioButtonFor(model => model.IsSalesItemManagedByAll, Model.IsSalesItemManagedByAll ? "selected" : "", htmlAttrib) 
 
       @Html.LabelFor(model => model.IsSalesItemManagedByAll) 
 
      </td> 
 
      </tr> 
 
     } 
 
     </table> 
 

 
Output of this is : 
 

 
<input name="IsSalesItemManagedByAll" id="IsSalesItemManagedByAll" type="radio" value="selected" datamember="Response>Data" binding="true" data-val-required="The Show All Items from SAP Business One field is required." data-val="true"> 
 

 
<label for="IsSalesItemManagedByAll">Show All Items from SAP Business One</label>

屬性像數據成員和有約束力的是可用的,但爲什麼改名字屬性

對此有任何幫助。

我用錯了嗎?

這裏是我的模型:

public class CRMSettings 
 
    { 
 
     public string RadioGroup { get; set; } 
 
     public int SettingID { get; set; } 
 
     public int TenantID { get; set; } 
 
     public bool SaveCustomerAsInactive { get; set; } 
 

 
     public bool SaveLeadAsInactive { get; set; } 
 
     /// <summary> 
 
     /// ALL, UDF,ITG ,BPC 
 
     /// </summary> 
 
     public string SalesItemManagedBy { get; set; } 
 
     /// <summary> 
 
     /// ALL, UDF,ITG ,BPC 
 
     /// </summary> 
 
     public string PurchaseItemManagedBy { get; set; } 
 

 
     public CRMSettings() 
 
     { 
 
      RadioGroup = "ItemSettings"; 
 
     } 
 

 
     public IEnumerable<MasterData> ItemGroups { get; set; } 
 

 

 
     #region "For Radio Button" 
 
     
 
     [System.ComponentModel.DefaultValue(false)] 
 
     [System.ComponentModel.DisplayName("Show All Items from SAP Business One")] 
 
     public bool IsSalesItemManagedByAll { get; set; } 
 
     
 
     [System.ComponentModel.DefaultValue(false)] 
 
     [System.ComponentModel.DisplayName("Show only those items whose UDF (U_WebItem=Y) value is Yes")] 
 
     public bool IsSalesItemManagedByUDF { get; set; } 
 
     
 
     [System.ComponentModel.DefaultValue(false)] 
 
     [System.ComponentModel.DisplayName("Show All Items from below selected Item Group")] 
 
     public bool IsSalesItemManagedByITG { get; set; } 
 
     
 
     [System.ComponentModel.DefaultValue(false)] 
 
     [System.ComponentModel.DisplayName("Show All Items from Business Partner Catalogs")] 
 
     public bool IsSalesItemManagedByBPC { get; set; } 
 

 

 

 

 
     [System.ComponentModel.DefaultValue(false)] 
 
     public bool IsPurchaseItemManagedByAll { get; set; } 
 
     [System.ComponentModel.DefaultValue(false)] 
 
     public bool IsPurchaseItemManagedByUDF { get; set; } 
 
     [System.ComponentModel.DefaultValue(false)] 
 
     public bool IsPurchaseItemManagedByITG { get; set; } 
 
     [System.ComponentModel.DefaultValue(false)] 
 
     public bool IsPurchaseItemManagedByBPC { get; set; } 
 
     #endregion 
 
    }

+3

你爲什麼要改變'name'屬性,這意味着模型綁定將會失敗?如果你想綁定到屬性'RadioGroup',然後使用'@ Html.RadioButtonFor(m => m.RadioGroup)' –

+0

並且設置'value'屬性爲''selected'或'null'該物業沒有意義。你究竟想在這裏做什麼? –

+0

在實際情況下,有4個單選按鈕,一次只能選擇其中一個。這就是爲什麼我需要一個名稱屬性,以使其相互交叉。在後端只有一個數據庫字段。取決於值單選按鈕應該選擇 – Manish

回答

0

我認爲你已經完成了複雜的事情。如果我正確地理解了它,你想填充4個單選按鈕,它是基於值檢查的。

如果是這樣,只是做:

// your viewmodel 

public class CRMSettings 
{ 
    // represent the 4 value of radio button 
    public string ItemStatus {get; set;} 
} 

那麼在你看來只是做

// represent 4 radio button 
@Html.RadioButtonFor(x => x.ItemStatus, "ALL") 
@Html.RadioButtonFor(x => x.ItemStatus, "UDF") 
@Html.RadioButtonFor(x => x.ItemStatus, "ITG") 
@Html.RadioButtonFor(x => x.ItemStatus, "BPC") 

在控制器

model.ItemStatus = "" // one of the 4 value you want radio to be preselected 

只是爲了澄清多一點:

,因爲你只得到o每組單選按鈕的ne值,因此只需要一組單選按鈕的屬性,並且通過將單選按鈕的值設置爲屬性來更改選擇。然後當你打電話給HtmlHelper的時候,它會把所有4個收音機作爲一個組來做所有其他的事,因爲它們具有相同的名稱(因此有一個屬性)

+0

謝謝你讓它變得非常簡單,我的代碼太複雜了 – Manish

-1

請試着做這樣

@ Html.RadioButtonFor(型號=> model.IsSalesItemManagedByAll,Model.IsSalesItemManagedByAll「選擇? 「:」,new {@ class =「TempClass」,@ name =「SalesManage」})

在HTML幫助程序中,您需要HTML a因爲您可以用'@'前綴聲明所有的HTML屬性。

希望這會有所幫助。

+0

我也試過這個,但是它添加了@name屬性而不是名稱請參閱 Data」@ binding =「true」> – Manish

+0

在這種情況下,問題是另一回事,因爲對我來說這是這樣的 @ Html.RadioButton 「isDOc」,「Documnets」,new {@ class =「TempClass」}) Deepesh