MVC 5 EF 6 编辑器用于下拉列表更改显示的文本

本文关键字:显示 文本 下拉列表 用于 EF 编辑器 MVC | 更新日期: 2023-09-27 18:32:49

我有一组简单的数据,从SQL中的表到HTML。编辑器为助手。我遇到的问题是数据库中的记录是布尔值,我需要显示一串文本,具体取决于该值是 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");
}

不影响回发到数据库的值的情况下更改显示的文本的最简单/最简单的方法是什么?

谢谢马克

MVC 5 EF 6 编辑器用于下拉列表更改显示的文本

在模型中,您可以创建bool属性的相应stringgetter)类型属性。这将始终为您提供您定义的相应字符串。即,

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

在编辑器模板中,您可以执行以下操作:

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

请注意,如果此属性是可编辑的,则可以使用 TextboxFor 而不是 LabelFor 。 作为:

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

JQuery 脚本标记中,您需要将相应的 bool 值设置为 Save 事件上的隐藏Recurring属性。 像这样:

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

您可以将布尔值作为隐藏字段发送,并仅显示其值的文本。

// Razor View / Editor Template    
@{ var recurringDisplay = Model.Recurring ? "recurring" : "not recurring"; }
@recurringDisplay
@Html.HiddenFor(m => m.Recurring)

正如 Stephen Muecke 所指出的,如果可以更改 Recurring 的值,您将需要一些 Javascript 来更新显示值。