我的项目中有FormTemplate类
public class FormTemplate : BaseEntity
{
public virtual string Name { get; set; }
public virtual DateTime? DateCreation { get; set; }
public virtual FormTemplateGroup Group { get; set; }
public virtual bool Active { get; set; }
public virtual FormTemplateStatus Status { get; set; }
public virtual IList<QuestionBlock> QuestionBlocks { get; set; }
public virtual bool IsFreeze { get; set; }
}
我使用MVC jqGrid http://mvcjqgrid.skaele.it/Home/Formatters
在页面上显示FormTemplates列表
@(Html.Grid("Grid")
.SetCaption("List")
.AddColumn(new Column("Name").SetLabel("Name"))
.AddColumn(new Column("GroupFor").SetLabel("Group"))
.AddColumn(new Column("DateCreation").SetLabel("Date"))
.AddColumn(new Column("Status").SetLabel("Status")).SetSortOnHeaderClick(false)
.AddColumn(new Column("Id").SetLabel(" ").SetCustomFormatter("buttonize").SetWidth(220).SetAlign(Align.Center))
.SetAutoWidth(false)
.SetRowNumbers(true)
.SetUrl(Url.Action("FormTemplateGridData"))
.SetAutoWidth(true)
.SetRowNum(10)
.SetRowList(new[] { 5, 10, 15, 20 })
.SetViewRecords(true)
.SetPager("Pager"))
我没有在我的页面上显示IsFreeze
属性的值,但我需要为IsFreeze == true
添加Activate按钮,否则为每个FormTemplate添加Deactivate按钮。
我尝试在buttonize
function buttonize(cellvalue, options, rowobject) {
var result = '<input type="button" value="Edit" onclick="editTemplate(' + options.rowId + ')">' + ' '
+ '<input type="button" value="Delete" onclick="deleteTemplate(' + options.rowId + ')">' + ' ';
if (isFreezeTemplate(rowobject[4])) {
result += '<input type="button" value="Activate" onclick="activateTemplate(' + options.rowId + ')">';
}
else {
result += '<input type="button" value="Deativate" onclick="deactivateTemplate(' + options.rowId + ')">';
}
return result;
}
添加功能
function isFreezeTemplate(id) {
var check = $.post('@Url.Action("IsFreezeFormTemplate")', { id: id });
return check;
}
并添加到控制器
中[HttpPost]
public bool IsFreezeFormTemplate(int id)
{
var formTemplate =
FormTemplateRepository.Query()
.Where(ft => ft.Id == id)
.SingleOrDefault();
if (formTemplate.IsFreeze == true) return true;
return false;
}
但是我的页面上只显示所有FormTemplates的激活按钮 怎么解决?
答案 0 :(得分:1)
您可以在网格中添加一个隐藏列,通过rowobject参数从中读取buttonize函数中的值。
.AddColumn(new Column("IsFreeze").SetHidden(true))
这样您就不需要ajax请求了。
答案 1 :(得分:0)
我建议您在IsFreeze
操作中填写FormTemplateGridData
(如果没有完成),并直接在buttonize
函数中使用它:
function buttonize(cellvalue, options, rowobject) {
var result = '<input type="button" value="Edit" onclick="editTemplate(' + options.rowId + ')">' + ' '
+ '<input type="button" value="Delete" onclick="deleteTemplate(' + options.rowId + ')">' + ' ';
if (rowobject["IsFreeze"]) {
result += '<input type="button" value="Activate" onclick="activateTemplate(' + options.rowId + ')">';
}
else {
result += '<input type="button" value="Deactivate" onclick="deactivateTemplate(' + options.rowId + ')">';
}
return result;
}
修改 - 操作代码
为了准确发送到网格的内容,这里是网格数据操作的代码:
public JsonResult FormTemplateGridData()
{
var donnees = new
{
total = 2,
page = 1,
records = 2,
rows = new List<FormTemplate>
{
new FormTemplate { Id = 1, Active = true, Name = "first", IsFreeze = true },
new FormTemplate { Id = 2, Active = true, Name = "second", IsFreeze = true },
new FormTemplate { Id = 3, Active = false, Name = "last", IsFreeze = false }
}
};
return Json(donnees);
}