2013-06-19 41 views
0

我必須創建一個nopCommerce插件來實現一些帶有下拉列表的可編輯行的telerik網格,問題是插件是類庫,而不是ASP.NET MVC應用程序和路由是在RouteProvider.cs文件中手動完成的。所以,我在這裏folowed的例子:http://demos.telerik.com/aspnet-mvc/razor/grid/clientedittemplates 而且必須具有以下配置: 我的模型:Telerik下拉列表不會加載到網格類庫中

public class ContentModel : BaseNopModel 
{ 
    public string ContentId { get; set; } 

    [NopResourceDisplayName("Plugins.Widgets.DiscountBanner.Title")] 
    public string Title { get; set; } 

    [NopResourceDisplayName("Plugins.Widgets.DiscountBanner.Content")] 
    public string Content { get; set; } 

    [UIHint("DiscountsEditor"), Required] 
    public string Discounts { get; set; } 
} 

我的控制器:

[GridAction] 
public ActionResult _SelectAjaxEditing() 
{ 
    List<ContentModel> model = new List<ContentModel>(); 
    return View("Nop.Plugin.Widgets.DiscountBanner.Views.WidgetsDiscountBanner.Configure", _discountBannerSettings.contentGrid == "" || _discountBannerSettings.contentGrid == null ? new GridModel(model) : new GridModel(JsonHelper.JsonDeserialize<List<ContentModel>>(_discountBannerSettings.contentGrid))); 
} 

筆者認爲:

 @{ 
     Layout = ""; 
    } 
    @model Nop.Plugin.Widgets.DiscountBanner.Models.ConfigurationModel 
    @using Nop.Plugin.Widgets.DiscountBanner.Models; 
    @using Nop.Web.Framework; 
    @using Telerik.Web.Mvc.UI; 

    @using Nop.Services.Discounts; 

<script type="text/javascript"> 
    function onEdit(e) { 
     $(e.form).find('#Discounts').data('tDropDownList').select(function (dataItem) { 
      return dataItem.Value == e.dataItem['Text']; 
     }); 
    } 
    </script> 
    <table class="adminContent"> 
    <tr> 
     <td class="adminTitle" colspan="2"> 
      DiscountBanner Plugin for sing-up and sales tracking script implementation on your site 
     </td> 
    </tr> 
    <tr> 
     <td class="adminTitle"> 
       @Html.NopLabelFor(model => model.ZoneId): 
     </td> 
     <td class="adminData"> 
       @Html.DropDownListFor(model => model.ZoneId, Model.AvailableZones) 
       @Html.ValidationMessageFor(model => model.ZoneId) 
     </td> 
    </tr> 
    <tr> 
     <td class="adminTitle" colspan="2"> 
      @(Html.Telerik().Grid<ContentModel>() 
      .DataKeys(keys => 
       { 
        keys.Add(model => model.ContentId); 
       }) 
      .Name("discount-settings-grid") 
      .ToolBar(commands => commands.Insert().ButtonType(GridButtonType.Text).ImageHtmlAttributes(new { style = "margin-left:0" })) 
      .DataBinding(dataBinding => 
       { 
        dataBinding.Ajax() 
         .Select("_SelectAjaxEditing", "WidgetsDiscountBanner") 
         .Insert("_InsertAjaxEditing", "WidgetsDiscountBanner") 
         .Update("_SaveAjaxEditing", "WidgetsDiscountBanner") 
         .Delete("_DeleteAjaxEditing", "WidgetsDiscountBanner"); 
       } 
      ) 
      .Columns(columns => 
       { 
        columns.Bound(c => c.Title); 
        columns.Bound(c => c.Content); 
        columns.Bound(c => c.Discounts); 

        columns.Command(commands => 
         { 
          commands.Edit().ButtonType(GridButtonType.Text); 
          commands.Delete().ButtonType(GridButtonType.Text); 
         }).Width(180).Title("Commands"); 
       }) 
       .ClientEvents(events => events.OnEdit("onEdit")) 
       .EnableCustomBinding(true) 
      ) 
     </td> 
    </tr> 
</table> 

和我的定製查看「DiscountsEditor.cshtml」:

@using Telerik.Web.Mvc.UI; 
@using Nop.Services.Discounts; 

@{ 
    var _discountService = Nop.Core.Infrastructure.EngineContext.Current.Resolve<IDiscountService>(); 
    var discounts = _discountService.GetAllDiscounts(null, true); 
    List<SelectListItem> listDiscounts = new List<SelectListItem>(); 
    foreach (var item in discounts) 
    { 
     listDiscounts.Add(new SelectListItem() { Text = item.Name, Value = item.Id.ToString() }); 
    } 
} 
@Html.Telerik().DropDownList().Name("Discounts").BindTo(listDiscounts) 

從我能告訴的是,telerik沒有找到我的部分視圖DiscountsEditor.cshtml,因爲該項目是一個類庫和路由值是不一樣的,對於特定的項目,我必須讓我的意見「Embedded Resource 「所以我可以用全名稱呼他們,問題是我無法將Telerik Grid配置爲從其他地方使用局部視圖。

我試圖用一個自定義模板是這樣的:

columns.Bound(c => c.Discounts) 
         .ClientTemplate(
         Html.Telerik().DropDownList().Name("Discount").BindTo(listDiscounts).ToHtmlString()); 

但模板加載我把一些信息後,在電網和不可編輯,如果我想編輯的下拉列表轉換成一個文本框,我不知道下一步該怎麼做,或者如果我可以使用另一個控制器,而是從當前視圖加載下拉菜單而不是局部視圖。

謝謝。

回答

0

您需要將您的視圖複製到您的輸出目錄。嘗試改變他們'複製如果更新'。您還需要在視圖文件夾中添加一個web.config文件。