Json CascadingDropDowns网络矩阵

Json CascadingDropDowns网络矩阵,json,razor,webmatrix,Json,Razor,Webmatrix,所以我在学习这个教程 一切都很好,但当我将第一个下拉列表保存到数据库时,将ID传递给我,而我却不知道如何传递名称而不是ID <select id="categoryId" name="categoryId"> <option value="">-- Select Category --</option> @foreach(var category in categories){ &

所以我在学习这个教程

一切都很好,但当我将第一个下拉列表保存到数据库时,将ID传递给我,而我却不知道如何传递名称而不是ID

 <select id="categoryId" name="categoryId">
            <option value="">-- Select Category --</option>
             @foreach(var category in categories){
              <option value="@category.CategoryId">@category.CategoryName</option>
        }
        </select>
这就是创建Json的原因

@{
Layout = null;
var categoryId = UrlData[0].IsEmpty() ? 1 : UrlData[0]; 
var db = Database.Open("AppCCentro");
var sql = "SELECT ProductId, ProductName FROM produtos WHERE CategoryId = @0 ORDER BY ProductName";
var products = db.Query(sql, categoryId);
Json.Write(products, Response.Output);
}

我不知道我必须更改什么,因此传递给选项所选的值不是ID而是类别的名称。

我不确定您想要完成什么,但是如果您的目标是从第一个下拉列表中选择CategoryName而不是CategoryId,您应该修改选项标签,如下所示:

<option value="@category.CategoryName">@category.CategoryName</option>
因为你不再需要分类了

编辑

显然,您必须修改创建json的页面,比如

@{
    Layout = null;
    var categoryId = UrlData[0].IsEmpty() ? "Beverages" : UrlData[0];
    var db = Database.Open("AppCCentro");
    var sql = @"SELECT t1.ProductId, t1.ProductName FROM produtos t1
        INNER JOIN categorias t2 ON t1.CategoryId = t2.CategoryId WHERE 
        t2.CategoryName = @0 ORDER BY ProductName";
    var products = db.Query(sql, categoryId);
    Json.Write(products, Response.Output);
}

如果“/”字符包含在CategoryName中,则可能存在对其进行编码的问题。

是的,但问题是如果我将该值更改为第二个下拉列表,则不会open@Nibbler我已经编辑了我的答案,但我不明白您为什么要完成此修改。
<option>@category.CategoryName</option>
var data = db.Query("SELECT CategoryName FROM categorias ORDER BY CategoryName");
var categories = data.Select(item => new SelectListItem {
    Text = item.CategoryName
});
@{
    Layout = null;
    var categoryId = UrlData[0].IsEmpty() ? "Beverages" : UrlData[0];
    var db = Database.Open("AppCCentro");
    var sql = @"SELECT t1.ProductId, t1.ProductName FROM produtos t1
        INNER JOIN categorias t2 ON t1.CategoryId = t2.CategoryId WHERE 
        t2.CategoryName = @0 ORDER BY ProductName";
    var products = db.Query(sql, categoryId);
    Json.Write(products, Response.Output);
}