2013-01-03 27 views
0

簡介:如何發送電流模式向UIHint視圖

我有一個名爲值的字段的網格,該字段可以由用戶編輯。

在我的模型上,我有一個帶有PossibleValues的IEnumerable列表,以防在用戶嘗試編輯時可能的值=空(網格上的值字段)我應該默認顯示一個文本框,但如果PossibleValues有值,我會必須顯示具有所有可能值的DropDownList。

問題:

在編輯模式下使用UIHint我可以顯示一個下拉列表,但我不知道如何將當前模式發送到Overrieded查看...

守則:

型號:

public class FamilyParameter 
{ 
    public FamilyParameter() 
    { 
     PossibleValues = new List<string>(); 
    } 

    [DisplayName("Value")] 
    [UIHint("_FamilyParameterValue")] 
    public string Value { get; set; } 

    public IEnumerable<string> PossibleValues { get; set; } 

    } 
} 

查看:共享/ 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

我已經解決它!

也許不是最好的辦法,但工程100%偉大:

它是如何工作:

在我UIHint查看我創建了一個簡單的股利。每次該用戶在我的網格上進入版本模式時,我都會執行一個帶有ajax post操作的Javascript,它將返回一個url。然後,我將執行URL以加載PartialView一個DropDownList,另一個使用TextBox。

希望它有幫助!

全碼:

查看:共享/ 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) 
0

我注意到你正在使用Telerik的,我用的劍道和語法​​看起來是一樣的,這裏有一個網格我使用。

@(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有定義你的編輯器的名稱屬性(確保編輯器中的控件的名稱是作爲屬性被綁定相同的名稱)和網格會爲其生成適當的視圖。

相關問題