Как установить значение свойства из SelectList в контроллере - PullRequest
0 голосов
/ 26 декабря 2018

Я пытаюсь установить значение свойства, которое находится в модели моего проекта.Я хочу выбрать значение в раскрывающемся списке, и когда я нажимаю кнопку «Создать», он устанавливает выбранное значение в значение свойства, что, очевидно, будет происходить в действии «Создать» соответствующего контроллера.Проблема в том, что я не могу использовать «.SelectedValue» с списком выбора и установить его как свойство модели.

Существует два метода действия «создать», один из которых параметризован, а другой - не параметризован.Первый сохраняет данные в таблицу, а второй получает значения.Я создал список целых чисел в непараметризованном методе и попытался поместить его в ViewBag (который работает нормально).Когда я запускаю код, представление работает, и выпадающий список заполняется элементами списка.Но после того, как я ввел необходимые данные, я нажимаю клавишу ввода и, несмотря на то, что для свойства модели в раскрывающемся списке установлено значение SelectedValue, значение остается пустым.

МОДЕЛЬ:

namespace Test.Models
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public partial class LabAsign
{
    [Display(Name = "ID")]
    public int LbAs_id { get; set; }
    [Display(Name = "Organization ID")]
    public Nullable<int> LbAs_orgId { get; set; }
    [Display(Name = "Labor ID")]
    public Nullable<int> LbAs_LabId { get; set; }
}

Контроллер

    public static int LabId
    public ActionResult Create()
    {
        ViewBag.LbAs_CmplntId = new SelectList(db.Complaints, "Cmplnt_Id");  



        var list = new List<int>();
        foreach (var item in db.Labors)
        {
            string c = item.Lab_OrgId.ToString();

            if (c == HomeController.c_orgid.ToString())
            {
                list.Add(item.Lab_id);
            }
        }            
        var selectList = new SelectList(list);
        Session["labid"] = list;
        ViewBag.LbAsLabId = selectList;

        //ViewBag.LbAs_LabId = new SelectList(db.Labors, "Lab_id", 
    "Lab_name");
        ViewBag.LbAs_orgId = new SelectList(db.Organizations, "org_id", 
    "org_name");
        return View();
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = 
"LbAs_id,LbAs_orgId,LbAs_LabId,LbAs_date,LbAs_CmplntId,LbAs_complStatus")] 
LabAsign labAsign)
    {
        if (ModelState.IsValid)
        {
            var selectList = new 
SelectList((System.Collections.IEnumerable)Session["labid"]);
            LabId = (int)selectList.SelectedValue;
            labAsign.LbAs_LabId = LabId;
            db.LabAsigns.Add(labAsign);
            db.SaveChanges();
            return RedirectToAction("IndexLbAsOrg");
        }

        ViewBag.LbAs_CmplntId = new SelectList(db.Complaints, 
"Cmplnt_Id","complnt_content", labAsign.LbAs_CmplntId);
        ViewBag.LbAs_LabId = new SelectList(db.Labors, "Lab_id", 
"Lab_name", labAsign.LbAs_LabId);
        ViewBag.LbAs_orgId = new SelectList(db.Organizations, "org_id", 
"org_name", labAsign.LbAs_orgId);
        return View(labAsign);
    }

ПРОСМОТР:

    @model Test.Models.LabAsign

    @{
        ViewBag.Title = "Create";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }

    <h2>Create</h2>


    @using (Html.BeginForm()) 
    {
        @Html.AntiForgeryToken()

        <div class="form-horizontal">
            <h4>LabAsign</h4>
            <hr />
            @Html.ValidationSummary(true, "", new { @class = "text-danger" 
})

            <div class="form-group">
                @Html.LabelFor(model => model.LbAs_orgId, "Organization 
ID", htmlAttributes: new { @class = "control-label col-md-2"@*, @style = 
"display:none;"*@ })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.LbAs_orgId, new { 
htmlAttributes = new { @class = "form-control"@*, @style = 
"display:none;"*@, 
@Value = Session["UserId"]} })
                    @Html.ValidationMessageFor(model => model.LbAs_orgId, 
"", new { @class = "text-danger" })
                </div>
            </div>

            <div class="form-group">
                @Html.LabelFor(model => model.LbAs_LabId, "LbAs_LabId", 
htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.DropDownList("LbAsLabId", null, htmlAttributes: 
new { @class = "form-control" })
                    @Html.ValidationMessageFor(model => model.LbAs_LabId, 
"", new { @class = "text-danger" })
                </div>
            </div>

Как видите, я использую Sessions для переноса списка из одного метода create в другой, объявляю новый список выбора и использую SelectedValue из списка выбора, чтобы обновить свойство, но при этом выдается это исключение:

    System.NullReferenceException: Object reference not set to an instance 
    of an object.

Когда я пытаюсь напрямую установить значение раскрывающегося списка, устанавливая значение представления как:

    @Html.DropDownList("LbAsLabId", null, htmlAttributes: new { @class = 
    "form-control", @Value = Session["labid"] })

значение свойства устанавливается в NULL, но не генерируются исключения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...