2016-02-02 83 views
1

我有什麼應該是從SQL中的表格到HTML.EditorFor幫助器的簡單數據集。 我的問題是在數據庫中的記錄是布爾值,我需要依靠,如果值是1或0MVC 5 EF 6 EditorFor下拉列表更改顯示文本

我的編輯模板看起來像這樣顯示的文本字符串:

@model nData.DAL.tblTaggingGroupInstance 
<td> 
    @Html.DisplayFor(modelItem => modelItem.WeekDay) 
</td> 
<td> 
    @Html.DisplayFor(modelItem => modelItem.Segment) 
</td> 

<td> 
    @Html.DisplayFor(modelItem => modelItem.NetSales) 
</td> 
<td> 
    @Html.DisplayFor(modelItem => modelItem.SwellSales) 
</td> 
<td> 
    @Html.DisplayFor(modelItem => modelItem.SpikeSales) 
</td> 
<td> 
    @Html.EditorFor(modelItem => modelItem.Recurring) 
</td> 
<td> 
    @Html.EditorFor(modelItem => modelItem.tblTaggingReasonID) 
</td> 
<td> 
    @Html.EditorFor(modelItem => modelItem.Comment) 
</td> 

我的型號是:

public partial class tblTaggingGroupInstance 
{ 
    public int ID { get; set; } 
    public int tblTaggingGroupID { get; set; } 
    public int FinYear { get; set; } 
    public int FinWeek { get; set; } 
    public int WeekDay { get; set; } 
    public Nullable<int> tblTaggingReasonID { get; set; } 
    public Nullable<decimal> NetSales { get; set; } 
    public Nullable<decimal> SwellSales { get; set; } 
    public Nullable<decimal> SpikeSales { get; set; } 
    public string Comment { get; set; } 
    public string Segment { get; set; } 
    public Nullable<bool> Recurring { get; set; } 
    public Nullable<decimal> BaseSales { get; set; } 

    public virtual tblTaggingGroup tblTaggingGroup { get; set; } 
} 

和控制器是

public ActionResult Index() 
{ 
    var SelectedID = Convert.ToInt32(Session["_SessionSelectGroupID"]); 
    var SelectedYear = Convert.ToInt32(Session["_SessionSelectFinYear"]); 
    var SelectedWeek = Convert.ToInt32(Session["_SessionSelectFinWeek"]); 
    var tblTaggingGroupInstances = db.tblTaggingGroupInstances.Include(t => t.tblTaggingGroup); 

    return View(tblTaggingGroupInstances.Where(t => t.tblTaggingGroupID == SelectedID && t.FinYear == SelectedYear && t.FinWeek == SelectedWeek).ToList()); 
} 

[HttpPost] 
public ActionResult Index(List<tblTaggingGroupInstance> model) 
{ 
    foreach (var record in model) 
    { 
     db.Entry(record).State = EntityState.Modified; 
    } 
    db.SaveChanges(); 
    return RedirectToAction("Index"); 
} 

什麼是最簡單/最簡單的方式來更改顯示的文本,而不影響回發到數據庫的值?

感謝 馬克

+0

您是否指'可空值重複性'屬性?你想顯示什麼文字? –

+0

是的,這是我需要說的定期或非定期取決於值是1還是0. – Readamus

+0

它可以爲空,所以當它的'null'時你想要顯示什麼?一種選擇是使用一個包含文本的附加'string'屬性的視圖模型,幷包含一個隱藏的屬性輸入(但是如果你想編輯它並更新顯示文本,那麼你將需要javascript) –

回答

1

在您的模型中,您可以創建與您的bool屬性相對應的string(吸氣劑)類型屬性。它總會給你你定義的相應的字符串。即,

public Nullable<bool> Recurring { get; set; } 
public string RecurringText 
{ get { 
     if(Recurring.HasValue && Recurring.Value == true) 
      return "Yes"; 
     else 
      return "No"; 
     } 
} 

,並在您EditorTemplate,你可以做:

@Html.LabelFor(m => m.RecurringText) 
@Html.HiddenFor(m => m.Recurring) 

請注意如果這個屬性是可編輯的,您可以使用TextboxFor而不是LabelFor。如:

@Html.TexboxFor(m => m.RecurringText) 

,並在您JQuery腳本標籤,就需要相應的布爾值設置爲上保存事件隱藏Recurring財產。例如:

//inside click of your save button: 
var inputRecurringValue = $('#ReccuringText').val(); 
if(inputRecurringValue.toLower() == 'yes') 
{ 
    $('#Recurring').val(true); 
} 
else 
    $('#Recurring').val(false); 
+0

謝謝 - 這樣做的訣竅 – Readamus

0

你可以把你的布爾作爲隱藏字段,只是顯示其值的文本。

// Razor View/Editor Template  
@{ var recurringDisplay = Model.Recurring ? "recurring" : "not recurring"; } 

@recurringDisplay 
@Html.HiddenFor(m => m.Recurring) 

正如斯蒂芬·馬克指出,你需要一些JavaScript來更新顯示值,如果經常性的價值是可以改變的。