Как получить список из контроллера для просмотра, когда представление уже прикреплено к таблице Entity Framework? - PullRequest
0 голосов
/ 24 ноября 2018

Я хочу получить список, выберите данные списка из контроллера для просмотра, так как у меня есть список в контроллере, например:

public static List<SelectListItem> Survey()
{
    // List<string> QuestionType = new List<string> { "SingleLineTextBox", "MultiLineTextBox", "YesOrNo", "SingleSelect", "MultiSelect" };
    List<SelectListItem> QuestionType = new List<SelectListItem>()
               {
                    new SelectListItem() { Text = "SingleLineTextBox",  
                                           Value = "SingleLineTextBox"},
                    new SelectListItem() { Text = "MultiLineTextBox", 
                                           Value = "MultiLineTextBox"},
                    new SelectListItem() { Text = "YesOrNo", Value = "YesOrNo" },
                    new SelectListItem() { Text = "SingleSelect", Value = "SingleSelect"},
                    new SelectListItem() { Text = "MultiSelect", Value = "MultiSelect"}
               };
    return QuestionType;
}

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

@model Survey.Question

@{
    ViewBag.Title = "ManageQuestion";
}

<fieldset>
    <legend> Enter Questions For Survey</legend>
    <table>
        <tr>
            <td>
                @Html.Label("Question Type")
            </td>
            <td>
                @Html.DropDownFor("QuestionType")

            </td>
        </tr>
        <tr>
            <td>
                @Html.Label("Title");
            </td>
            <td>
                @Html.TextBoxFor(a=>a.Text)
            </td>
        </tr>
        <tr>
            <td>
                @Html.Label("Description")
            </td>
            <td>

            </td>
        </tr>
        <tr>
            <td>
                @Html.Label("Value")
            </td>
            <td>
                @Html.TextAreaFor(a=>a.Options)
            </td>
        </tr>
    </table>
</fieldset>

@Html.DropDownFor("QuestionType") - это выпадающий список, в который я хочу добавить элементы списка;Survey.Question - это таблица Question в базе данных Survey.Я могу написать это так, чтобы получить элемент списка в представлении, но я добавил таблицу в модель, так как мне нужны данные из таблицы:

@model List<SelectListItem>

Как я могу это выяснить, чтобы получить список из контроллера для просмотра?

Надеемся на ваше предложение

Ответы [ 3 ]

0 голосов
/ 24 ноября 2018

У меня небольшой успех в получении одного метода для получения списка при просмотре из контроллера, то есть,

Я возвратил список из вида как,

   List<SelectListItem> QuestionType = Survey();
            return View(QuestionType);

Используйте кортеж, чтобы добавить болееодно значение для модели,

@model Tuple<Survey.Question,List<SelectListItem>>

Получить значение для текстового поля, например,

 @Html.TextAreaFor(model=>Model.Item1.Options)

Но при получении ошибки типа при получении значения для раскрывающегося списка,

 @Html.DropDownListFor("QuestionType", Model.Item2)

Надеюсь, какая-то синтаксическая ошибка, какое-либо решение?

0 голосов
/ 24 ноября 2018

решено:

@{
    List<SelectListItem> QuestionType = new List<SelectListItem>();
    QuestionType.Add(new SelectListItem
         {
             Text = "SingleLineTextBox",
             Value = "SingleLineTextBox"
         });
    QuestionType.Add(new SelectListItem
         {
             Text = "MultiLineTextBox",
             Value = "MultiLineTextBox",
             Selected = true
         });
    QuestionType.Add(new SelectListItem
         {
             Text = "YesOrNo",
             Value = "YesOrNo"
         });
             QuestionType.Add(new SelectListItem
         {
             Text = "SingleSelect",
             Value = "SingleSelect"
         });
             QuestionType.Add(new SelectListItem
         {
             Text = "MultiSelect",
             Value = "MultiSelect"
         });
}

@Html.DropDownList("DDlDemo", new SelectList(QuestionType, "Value", "Text"))
0 голосов
/ 24 ноября 2018

Есть много способов обойти это, сказав b D-Shih, когда вы отправляете список через ViewBag / ViewData, но я предпочитаю, чтобы вы отправляли его через ViewModel.

Итак, модель вопроса - это то, что высвязаны с видом.Вы можете легко добавить следующие свойства в вашу модель:

Public Class Question
{
   //Other Properties
   public string SelectedItemId { get; set; }
   public IEnumerable<SelectListItem> Items { get; set; }
}

Пока вы заполняете Items в модели вопроса, вы можете позже захотеть взять SelectedItemId, поэтому вы добавите его и там (Я предлагаю вам создать ViewModel для этого).

Затем в вашем контроллере:

Question q = new Question();
q.Items = Survey(); //this is your method that returns SelectListItem, or you can create it here.
return view(q);

Затем в вашем представлении:

@Html.DropDownListFor(x => x.SelectedItemId , Model.Items , "-- Select Type --")
...