简介
我有一个带有字段调用值的网格,该字段可以由用户编辑。
在我的模型上,我有一个带有PossibleValues的IEnumerable列表,如果用户尝试编辑时可能值=空(网格上的值字段)我应该默认显示一个文本框,但是如果PossibleValues有值,我会有显示包含所有可能值的DropDownList。
问题:
在编辑模式下使用UIHint我可以显示dropDownList,但我不知道如何将当前模型发送到Overrieded View ...
守则:
型号:
public class FamilyParameter
{
public FamilyParameter()
{
PossibleValues = new List<string>();
}
[DisplayName("Value")]
[UIHint("_FamilyParameterValue")]
public string Value { get; set; }
public IEnumerable<string> PossibleValues { get; set; }
}
}
查看:Shared / EditorTemplates / _FamilyParameterValue.cshtml
@model Bpt.Domain.FamilyParameter
@Html.Telerik().DropDownList().Name("demo");
查看:主要
<div style="height:270px" >
<table>
<tr>
<td width="100%">
<br />
@(Html.Telerik().Grid<FamilyParameter>()
.Name("GridParam")
.DataKeys(keys => keys.Add(param => param.Code))
.HtmlAttributes(new { style = "width: 420px;" })
.NoRecordsTemplate("No existen resultados...")
.DataBinding(
dataBinding => dataBinding.Ajax()
.Select("_EditMaterial_SelectParameters", Controllers.Valoration,Model)
.Update("_EditMaterial_UpdateParameters", Controllers.Valoration,Model)
)
.Columns(columns =>
{
columns.Bound(param => param.Code).Width("75px").HtmlAttributes(new { style = "text-align: left;" }).ReadOnly();
columns.Bound(param => param.Description).Width("200px").HtmlAttributes(new { style = "text-align: left;" }).ReadOnly();
columns.Bound(param => param.Value).Width("65px").HtmlAttributes(new { style = "text-align: left;" });
columns.Command(commands =>
commands.Edit().ButtonType(GridButtonType.Image)
).Width(60);
})
.Editable(editing => editing.Mode(GridEditMode.InLine))
.Scrollable(scrolling => scrolling.Height(140))
.Footer(false)
.Sortable()
.Resizable(resizing => resizing.Columns(true))
.Reorderable(reorder => reorder.Columns(true))
)
</td>
</tr>
</table>
</div>
答案 0 :(得分:0)
我已经解决了!!
也许不是最好的方式,但效果很好:
工作原理:
在我的UIHint视图中,我创建了一个简单的Div。每次用户在我的网格上进入版本模式时,我将执行带有ajax post动作的Javascript,这将返回一个url。然后我将执行The url以便使用DropDownList加载PartialView,使用TextBox加载另一个。
希望它有所帮助!
完整代码:
查看:Shared / EditorTemplates / _FamilyParameterValue.cshtml
<div id="divFamilyParameterValue"> </div>
控制器:
public ActionResult FamilyPArameterValueDdl(string id)
{
var tmpParameter = DetailHvmModel.HvmModel.CurrentArticle.Family.Parameters.Where(e => e.Code == id).FirstOrDefault();
return PartialView("_FamilyPArameterValueDdl",tmpParameter);
}
public ActionResult FamilyPArameterValueTextBox(string id)
{
var tmpParameter = DetailHvmModel.HvmModel.CurrentArticle.Family.Parameters.Where(e => e.Code == id).FirstOrDefault();
return PartialView("_FamilyPArameterValueTextBox", tmpParameter);
}
public ActionResult _EditMaterial_EditParameters(string id)
{
var tmpParameter = DetailHvmModel.HvmModel.CurrentArticle.Family.Parameters.Where(e => e.Code == id).FirstOrDefault();
string FamilyParameterValueView;
// get the parameter that will edit
if(tmpParameter.PossibleValues.Any())
{
FamilyParameterValueView = Url.Action("FamilyPArameterValueDdl");
}
else
{
FamilyParameterValueView = Url.Action("FamilyPArameterValueTextBox");
}
return Json(new { familyParameterValueView = FamilyParameterValueView });
}
查看:主要
<div style="height:270px" >
<table>
<tr>
<td width="100%">
<br />
@(Html.Telerik().Grid<FamilyParameter>()
.Name("GridParam")
.DataKeys(keys => keys.Add(param => param.Code))
.HtmlAttributes(new { style = "width: 420px;" })
.NoRecordsTemplate("No existen resultados...")
.DataBinding(
dataBinding => dataBinding.Ajax()
.Select("_EditMaterial_SelectParameters", Controllers.Valoration,Model)
.Update("_EditMaterial_UpdateParameters", Controllers.Valoration,Model)
)
.Columns(columns =>
{
columns.Bound(param => param.Code).Width("75px").HtmlAttributes(new { style = "text-align: left;" }).ReadOnly();
columns.Bound(param => param.Description).Width("200px").HtmlAttributes(new { style = "text-align: left;" }).ReadOnly();
columns.Bound(param => param.Value).Width("65px").HtmlAttributes(new { style = "text-align: left;" });
columns.Command(commands =>
commands.Edit().ButtonType(GridButtonType.Image)
).Width(60);
})
.Editable(editing => editing.Mode(GridEditMode.InLine))
.Scrollable(scrolling => scrolling.Height(140))
.Footer(false)
.Sortable()
.ClientEvents(e => e.OnEdit("OnEditGridParam"))
.Resizable(resizing => resizing.Columns(true))
.Reorderable(reorder => reorder.Columns(true))
)
</td>
</tr>
</table>
</div>
<script type="text/javascript">
function OnEditGridParam(e) {
var item = { id: e.dataItem.Code };
$.ajax({
url: "/Valoration/_EditMaterial_EditParameters",
type: "POST",
async: false,
data: item,
success: function (data, status, xhr) {
$.post(data.familyParameterValueView, item, function (partial) { $('#divFamilyParameterValue').html(partial); });
},
error: function (xhr, status, err) {
alert(err);
}
});
}
</script>
查看:_FamilyParameterValueDdl.cshtml
@model Bpt.Domain.FamilyParameter
@(Html.DropDownListFor(e => e.Value, new SelectList(Model.PossibleValues), new { style="font-size:12px;" }))
查看:_FamilyParameterValueTextBox.cshtml
@model Bpt.Domain.FamilyParameter
@Html.TextBoxFor(e => e.Value)
答案 1 :(得分:0)
我注意到你正在使用Telerik,我使用的是Kendo,语法看起来一样,这是我使用的网格。
@(Html.Kendo().Grid(Model)
.Name("grdDocumentManager")
//Column Binding
.Columns(columns =>
{
columns.Bound(dm => dm.DocumentNote).Title("Note").Width("20px").ClientTemplate("#if(trim(DocumentNote) != \"\"){#" +
"<img src=\"/content/i_discuss.gif\" title=\"View Notes\" onclick=\"javascript:showWindow(#=DocumentId#, '#=CaseId#');\" width=\"16\" height=\"16\" border=\"0\" style=\"cursor:pointer;\">#}" +
"else{#" +
"<img src=\"/content/i_rate.gif\" title=\"Add Note\" onclick=\"javascript:showWindow(#=DocumentId#, '#=CaseId#');\" width=\"16\" height=\"16\" border=\"0\" style=\"cursor:pointer;\">" +
"#}#");
columns.Bound(dm => dm.DocumentId).Hidden(true);
columns.Bound(dm => dm.CaseId).Width("50px");
columns.Bound(dm => dm.PresidingJudge).ClientGroupHeaderTemplate("Presiding Judge: #=value#").Width("20px");
columns.Bound(dm => dm.MagistrateJudge).ClientGroupHeaderTemplate("Magistrate Judge: #=value#").Width("20px");
columns.Bound(dm => dm.CaseType).Width("20px");
columns.Bound(dm => dm.StatusValue).Width("20px").ClientTemplate("#=Status#").EditorTemplateName("StatusEditor").Title("Status");
columns.Bound(dm => dm.UserName).Width("20px").EditorTemplateName("UserNameEditor");
columns.Bound(dm => dm.CreationDate).Width("50px").Format("{0:g}");
columns.Bound(dm => dm.PageCount).Width("20px");
columns.Command(command => command.Edit()).Width(200);
}
)
.Editable(e => e.Mode(GridEditMode.InLine))
.DataSource(ds => ds.Ajax()
.Model(m => {
m.Id(dm => dm.DocumentId);
m.Field(dm => dm.CaseId).Editable(false);
m.Field(dm => dm.CaseType).Editable(false);
m.Field(dm => dm.CreationDate).Editable(false);
m.Field(dm => dm.DocumentNote).Editable(false);
m.Field(dm => dm.MagistrateJudge).Editable(false);
m.Field(dm => dm.PresidingJudge).Editable(false);
m.Field(dm => dm.PageCount).Editable(false);
})
.Update(update => update.Action("DocumentUpdate","Admin"))
)
)
如果您注意到列绑定它有一个名为EditorTemplate的属性,那么您可以定义编辑器的名称(确保在编辑器中控件的名称与绑定的属性的名称相同)并且网格将生成适当的观点。