0

The grid uses a drop down list that contains foreign key values. Right now, I can select an item but I can only see the corresponding item ID instead of it's name in the grid.

I tried following the steps in this post but all I see is 'undefined' in the grid row. Any ideas?

By the way, I'm using the open source version of Kendo UI where everything is in JavaScript.

4

3 回答 3

1

这是 MVC 版本,但在这里,您不需要模板。看:

http://decisivedata.net/kendo-ui-grid-and-entity-framework-code-first-foreign-key-fields/

假设您想获取产品名称,而不是在 Orders 表中使用 ProductID。您将使用如下列:

columns.ForeignKey(c => c.ProductID, (IEnumerable)ViewData["Products"], dataFieldText: "ProductName", dataFieldValue: "ProductID");

并确保您的模型在 Orders 模型中有外键:

 [ForeignKey("ProductID")]
 public Product FKProduct { get; set; }  

然后更新控制器:

public class HomeController : Controller {        
    private NorthwindRepository northwindRepository = new NorthwindRepository();
    public ActionResult Index()
    {
        PopulateProducts();         
        return View(northwindRepository.OrderDetails);     
    }
    private void PopulateProducts()     
    {         
        ViewData["Products"] = northwindRepository.Products;     
    }
} 
于 2014-07-31T03:26:22.197 回答
0

我最终向 Telerik 请求了支持,这个JS Bin中显示了工作解决方案。

于 2013-11-28T04:19:21.167 回答
0

您需要使用模板。

在您的模型中有另一个与名称相关的字段(您需要在编辑时将其设置为正确的值),然后使用“#=name#”之类的模板

首先像这样创建您的列:

columns.Bound(x => x.ForeignKey).ClientTemplate("#=Name#");

然后在控制器的 Update 方法中,将视图模型上的 Name 属性设置为您想要的。

viewModel.Name = GetName(viewModel.ForeignKey);
return this.Json(new[] { viewModel }.ToDataSourceResult(request, this.ModelState));

编辑 2:要在 javascript 模式下构建网格,您需要像这样定义列:

{ field: "ForeignKey", title: "Foreign Key", template: '#=Name#', editor: myEditor}

然后像这样定义你的编辑器:

function myEditor(container, options) {
    $('<input required data-text-field="ForeignKeyName" data-value-field="ForeignKey" data-bind="value:' + options.field + '"/>')
        .appendTo(container)
        .kendoDropDownList({
            autoBind: false,
            dataSource: myDataSource
        });
}

您可能仍然需要设置该值,但是,如果您想在服务器端执行此操作,您可以使用我上面提到的方法,如果您想在客户端执行此操作,您将需要处理网格保存事件并设置那里的数据源中的值。

希望这可以帮助。

于 2013-11-12T11:51:18.643 回答