Я пытаюсь установить значение свойства, которое находится в модели моего проекта.Я хочу выбрать значение в раскрывающемся списке, и когда я нажимаю кнопку «Создать», он устанавливает выбранное значение в значение свойства, что, очевидно, будет происходить в действии «Создать» соответствующего контроллера.Проблема в том, что я не могу использовать «.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, но не генерируются исключения