Веб-матрица CascadingDropDowns

Итак, я следовал этому руководству

http://www.mikesdotnetting.com/Article/196/WebMatrix-jQuery-Cascading-Dropdown-Lists

Все работает хорошо, но когда я сохраняю в базу данных первое раскрывающееся меню, передайте мне идентификатор, и я не могу понять, как передать имя вместо идентификатора.

 <select id="categoryId" name="categoryId">
            <option value="">-- Select Category --</option>
             @foreach(var category in categories){
              <option value="@category.CategoryId">@category.CategoryName</option>
        }
        </select>

Я знаю, что это идентификатор, но если я изменю его, в раскрывающемся списке дочерних элементов не будет отображаться никакой опции.

это помощник

    var data = db.Query("SELECT CategoryId, CategoryName FROM categorias ORDER BY CategoryName");
    var categories = data.Select(item => new SelectListItem {
    Value = item.CategoryId.ToString(), 
    Text = item.CategoryName
});

И это то, что создает 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);
}

Я не могу понять, что мне нужно изменить, чтобы выбранное значение, которое он передал, было не идентификатором, а названием категории.


person Nibbler    schedule 18.07.2014    source источник


Ответы (1)


Я не уверен, чего вы хотите достичь, но если ваша цель состоит в том, чтобы выбрать CategoryName вместо CategoryId из вашего первого раскрывающегося списка, вам следует изменить тег option следующим образом:

<option value="@category.CategoryName">@category.CategoryName</option>

Вы также должны использовать

<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
});

потому что вам больше не нужен CategoryId.

Отредактировано

Очевидно, вы должны изменить страницу, которая создает 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.

person GmG    schedule 18.07.2014
comment
Да, но дело в том, что если я изменю значение на ‹option [email protected]›, второе раскрывающееся меню не откроется - person Nibbler; 18.07.2014
comment
@Nibbler Я отредактировал свой ответ, но не понимаю, почему вы хотите выполнить эту модификацию. - person GmG; 19.07.2014