У меня есть модель категории

public class Category
{
    //[PlaceHolder("Select file")]
    //[UmbracoRequired("Form.Label.Import.SelectFile")]
    //[UmbracoDisplay("Form.Label.Import.SelectFile")]
    //[Required]
    public int Id { get; set; }

    public string Name { get; set; }
}

И список категорий, созданных в моем контроллере

List<Category> items = new List<Category>();

Список категорий следует использовать в (строго типизированном) представлении, где у меня есть цикл foreach, отображающий курс другой модели, например.

        <td>
            @Html.DisplayFor(modelItem => item.Students)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.AdmissionInfo)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.CategoryId)
        </td>

Так что вместо

@Html.DisplayFor(modelItem => item.CategoryId)

Он должен отображать свойство Name типа Category в зависимости от значения CategoryId модели курса

SelectList categories = new SelectList((IEnumerable<MvcImport.Models.Category>)ViewData["categories"], "Id", "Name", item.CategoryId);

Например.

@Html.DisplayFor(categories.Where(m => m.Id == item.CategoryId).FirstOrDefault())

Но последняя строка не работает.

Не знаю, как назвать только значение. (Я НЕ хочу отображать раскрывающийся список, только выбранное значение)

Благодарность

1
nickornotto 6 Авг 2014 в 19:01

2 ответа

Лучший ответ

Вы можете попробовать такой способ:

@Html.DisplayFor(modelItem => categories.First(m => m.Id == item.CategoryId).Name)

Или более безопасно (отформатировано для удобства чтения):

@Html.DisplayFor(modelItem => categories.Where(m => m.Id == item.CategoryId)
                                        .Select(m => m.Name)
                                        .FirstOrDefault())
1
har07 7 Авг 2014 в 18:18
Спасибо @ har07 Я получаю Operator '==' cannot be applied to operands of type 'method group' and 'int' для строки m.Id == item.CategoryId для обоих примеров (и Category.Id, и Course.CategoryId, конечно, являются целыми числами. Мое представление имеет тип @model IEnumerable<MvcImport.Models.Course>
 – 
nickornotto
7 Авг 2014 в 15:22
Я предположил, что categories имеет тип IEnumerable<Category>, не заметил, что вы объявили его как SelectList. Попробуйте: var categories = (IEnumerable<SOMvcApplication.Models.Category>) ViewData["categories"];
 – 
har07
7 Авг 2014 в 18:16
Фантастика @ har07! Это работает var categories = (IEnumerable<MvcImport.Models.Category>)ViewData["categories"]; с @Html.DisplayFor(modelItem => categories.First(m => m.Id == item.CategoryId).Name)
 – 
nickornotto
7 Авг 2014 в 19:40

Это сработало для меня:

@Html.DropDownListFor(x =>item.RequestTypeID, new SelectList(ViewBag.RequestTypes, "Value", "Text", item.RequestTypeID))
0
InGeek 31 Окт 2017 в 18:56