MVC 5 EF 6 EditorFor下拉列表更改显示的文本
MVC 5 EF 6 EditorFor Dropdown List Change Text displayed
我有一组简单的数据,从 SQL 中的 table 到 HTML.EditorFor 助手。
我遇到的问题是数据库中的记录是布尔值,我需要根据值是 1 还是 0 来显示文本字符串。
我的编辑器模板如下所示:
@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");
}
在不影响回发到数据库的值的情况下更改显示的文本的最简单/最容易的方法是什么?
谢谢
马克
您可以将布尔值作为隐藏字段发送,并只显示其值的文本。
// Razor View / Editor Template
@{ var recurringDisplay = Model.Recurring ? "recurring" : "not recurring"; }
@recurringDisplay
@Html.HiddenFor(m => m.Recurring)
正如 Stephen Muecke 指出的那样,如果 Recurring 的值可以更改,您将需要一些 Javascript 来更新显示值。
在您的模型中,您可以创建对应的 string
(getter) 类型 属性 bool
属性。这将始终为您提供您定义的相应字符串。即,
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
脚本标签中,您需要将相应的 bool 值设置为隐藏的 Recurring
属性 保存事件。类似于:
//inside click of your save button:
var inputRecurringValue = $('#ReccuringText').val();
if(inputRecurringValue.toLower() == 'yes')
{
$('#Recurring').val(true);
}
else
$('#Recurring').val(false);
我有一组简单的数据,从 SQL 中的 table 到 HTML.EditorFor 助手。 我遇到的问题是数据库中的记录是布尔值,我需要根据值是 1 还是 0 来显示文本字符串。
我的编辑器模板如下所示:
@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");
}
在不影响回发到数据库的值的情况下更改显示的文本的最简单/最容易的方法是什么?
谢谢 马克
您可以将布尔值作为隐藏字段发送,并只显示其值的文本。
// Razor View / Editor Template
@{ var recurringDisplay = Model.Recurring ? "recurring" : "not recurring"; }
@recurringDisplay
@Html.HiddenFor(m => m.Recurring)
正如 Stephen Muecke 指出的那样,如果 Recurring 的值可以更改,您将需要一些 Javascript 来更新显示值。
在您的模型中,您可以创建对应的 string
(getter) 类型 属性 bool
属性。这将始终为您提供您定义的相应字符串。即,
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
脚本标签中,您需要将相应的 bool 值设置为隐藏的 Recurring
属性 保存事件。类似于:
//inside click of your save button:
var inputRecurringValue = $('#ReccuringText').val();
if(inputRecurringValue.toLower() == 'yes')
{
$('#Recurring').val(true);
}
else
$('#Recurring').val(false);