我必须创建一个nopCommerce插件来实现一些带有下拉列表的telerik gird作为可编辑行,问题是插件是类库,而不是ASP.NET MVC应用程序,路由是在RouteProvider中手动完成的.cs文件。所以我在这里举了一个例子:http://demos.telerik.com/aspnet-mvc/razor/grid/clientedittemplates 并且必须具有以下配置: 我的模特:
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,因为项目是一个类库而且路由值不一样,对于特定项目我必须使我的视图“嵌入式资源”所以我可以用全名调用它们,问题是我无法将Telerik Grid配置为使用来自其他地方的部分视图。
我尝试使用这样的自定义模板:
columns.Bound(c => c.Discounts)
.ClientTemplate(
Html.Telerik().DropDownList().Name("Discount").BindTo(listDiscounts).ToHtmlString());
但是我在网格中放入一些信息并且不可编辑后加载模板,如果我想编辑它,下拉列表转换为TextBox,我不知道接下来该做什么,或者我是否可以使用另一个控制器但要从当前视图加载下拉列表而不是局部视图。
感谢。
答案 0 :(得分:0)
您需要将视图复制到输出目录。尝试将它们更改为“如果更新则复制”。您还需要在views文件夹中添加web.config文件。