2016-02-02 46 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来更新显示值,如果经常性的价值是可以改变的。