【发布时间】:2019-10-02 20:04:51
【问题描述】:
我的剑道网格中似乎有一个独特的问题。我到处搜索并尝试了多种方法,但没有运气。我需要将我的“HoldReason”下拉列表绑定到剑道网格,并且“HoldReason”将始终为空或最初未选择任何内容。目前我的网格在该网格列中显示“未定义”。
视图模型:
public class PaymentDetailTerm
{
public PaymentDetailTerm()
{
}
private int? holdReasonId;
private bool holdFlag;
private decimal disbursed;
private SysHoldReason holdReason;
//some properties omitted
[Display(Name = "Disbursed")]
[NonNegative]
[DataType(DataType.Currency), DisplayFormat(DataFormatString = "{0:c}")]
public decimal Disbursed
{
get
{
return disbursed;
}
set
{
disbursed = value;
}
}
[Display(Name = "Hold")]
[BoolFieldRequiredWhenInt("HoldReasonId")]
public bool HoldFlag
{
get
{
return holdFlag;
}
set
{
holdFlag = value;
}
}
[Display(Name = "Hold Reason")]
[IDFieldRequiredWhenBool("HoldFlag")]
public int? HoldReasonId
{
get
{
return holdReasonId;
}
set
{
holdReasonId = value;
}
}
[UIHint("HoldReasonEditor")]
public SysHoldReason HoldReason
{
get
{
if (holdReason == null || holdReason.HoldReasonId == 0)
{
return new SysHoldReason() { HoldReasonId = 0, HoldReasonTitle = string.Empty };
}
else return holdReason;
}
set { holdReason = value; }
}
}
模板编辑器“HoldReasonEditor”:
@using System.Collections
@using Kendo.Mvc.UI
<kendo-dropdownlist name="HoldReasonId" bind-to="ViewBag.HoldReasonId" Auto-Width="true" option-label=" " datatextfield="Text" datavaluefield="Value" value-primitive="true"></kendo-dropdownlist>
控制器(这是有关下拉列表的仅有的两个语句):
ViewData["HoldReasonId"] = new SelectList(_context.SysHoldReason.Where<SysHoldReason>(x => x.SiteId == 99 || x.SiteId == _user.SiteId), "HoldReasonId", "HoldReasonTitle");
ViewData["HoldReasonCollection"] = new SelectList(_context.SysHoldReason.Where<SysHoldReason>(x => x.SiteId == 99 || x.SiteId == _user.SiteId), "HoldReasonId", "HoldReasonTitle");
我将 HoldReasonCollection 用作隐藏字段,以便稍后在网格保存时正确设置信息。 SysHoldReason 模型包含 HoldReasonId 和 HoldReasonTitle 属性(还有更多,但我只关心这些)。
以及我认为定义的剑道网格:
@(Html.Kendo().Grid<eCLERC.ViewModels.PaymentDetailTerm>(Model.PaymentDetailTerms)
.Name("TermGrid")
.DataSource(ds => ds
.Ajax()
.ServerOperation(false)
.Model(m =>
{
m.Field(d => d.TermTypeTitle).Editable(false);
m.Field(d => d.PayeePartyName).Editable(false);
m.Field(d => d.PayoffBalance).Editable(false);
m.Field(d => d.PeriodicAmount).Editable(false);
m.Field(d => d.UnpaidBalance).Editable(false);
m.Field(d => d.ClerkFeeFlag).Editable(false);
m.Field(d => d.HoldFlag).Editable(true);
m.Field(d => d.HoldReasonId).Editable(true);
m.Field(d => d.HoldReason);
//m.Field(p => p.HoldReason).DefaultValue(ViewData["HoldReasonId"] as eCLERC.Models.DB.SysHoldReason);
})
)
.Columns(columns =>
{
columns.Bound(e => e.TermTypeTitle).Width(110).Title("Term Type");
columns.Bound(e => e.PayeePartyName).Width(110).Title("Payee");
columns.Bound(e => e.PayoffBalance).Width(110);
columns.Bound(e => e.PeriodicAmount).Width(110); //TODO: Nikki - what is recap amount
columns.Bound(e => e.UnpaidBalance).Width(100);
columns.Bound(e => e.ClerkFeeFlag).Width(100);
columns.Bound(e => e.Disbursed).Width(100);
columns.Bound(e => e.HoldFlag).Width(100);
columns.Bound(e => e.HoldReason).EditorTemplateName("HoldReasonEditor").ClientTemplate("#=HoldReason.Text#");
})
.Sortable()
.Editable(editable => editable.Mode(GridEditMode.InCell))
.Events(x => { x.Save("function(e){onGridSave(e)}"); })
.Scrollable()
.HtmlAttributes(new { style = "height:350px" }))
下拉菜单有效,如果我选择一个值,我会看到 HoldReason 标题值,但我只是不知道如何修复最初显示的“未定义”文本。同样,如果我想将下拉菜单设置回选项标签(“”),下拉控件会显示 HoldReasonId 所需的验证。
【问题讨论】:
标签: asp.net kendo-grid