通过视图将值从控制器传递到控制器
本文关键字:控制器 视图 | 更新日期: 2023-09-27 18:14:38
我有两个类,其中一个是另一个的父类。基本CRUD函数是在控制器中创建的。在表的设计中,我将子类中的父id作为外键。在子函数的Create视图中,我被要求输入父ID。我已经更改了Create以接受父节点的ID。但当我删除在视图中选择父id的代码时,我在Create中得到异常。有没有一种方法,我可以设置父ID在我的两个创建函数(重载函数)。
public ActionResult Create(int? id)
{
ViewBag.LsystemID = new SelectList(db.Lsystem, "LsystemID", "LsystemName",id);
ViewBag.TCID = new SelectList(db.TC, "TCID", "TCName");
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "OptionID,OptionName,TCID,LsystemID")] Option option)
{
if (ModelState.IsValid)
{
db.Option.Add(option);
db.SaveChanges();
return RedirectToAction("Index");
}
// ViewBag.LsystemID = new SelectList(db.Lsystem, "LsystemID", "LsystemName", op);
ViewBag.TCID = new SelectList(db.TC, "TCID", "TCName", option.TCID);
return View(option);
}
<<p> 视图/strong> @using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.LabelFor(model => model.OptionName, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.OptionName, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.OptionName, "", new { @class = "text-danger" })
@Html.LabelFor(model => model.TCID, "TCID", htmlAttributes: new { @class = "control-label col-md-2" })
@Html.DropDownList("TCID", null, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.TCID, "", new { @class = "text-danger" })
@Html.LabelFor(model => model.LsystemID, "LsystemID", htmlAttributes: new { @class = "control-label col-md-2" })
@Html.DropDownList("LsystemID", null, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.LsystemID, "", new { @class = "text-danger" })
<input type="submit" value="Create" class="btn btn-default" />
}
如何传递值LsystemID而不显示在视图中?
编辑1:添加Model类 public class Lsystem
{
public int LsystemID { get; set; }
public string LsystemName { get; set; }
public virtual ICollection<Option> Options { get; set; }
// public int OptionId { get; set; }
}
public class Option
{
public int OptionID { get; set; }
public string OptionName { get; set; }
public int TCID { get; set; }
public virtual TC tc { get; set; }
public virtual Lsystem Lsystem { get; set; }
public int LsystemID { get; set; }
public virtual ICollection<OptionValue> OptionValues { get; set; }
}
首先创建一个视图模型,表示视图中需要的内容(根据需要添加验证和显示属性)
public class OptionVM
{
public int Lsystem { get; set; }
public string Name { get; set; }
public int TC { get; set; }
public SelectList TCList { get; set; }
}
和控制器
public ActionResult Create(int? id)
{
OptionVM model = new OptionVM
{
Lsystem = id // set the parent
};
ConfigureViewModel(model);
return View(model);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(OptionVM model)
{
if (!ModelState.IsValid)
{
ConfigureViewModel(model);
return View(model);
}
Option option = new Option
{
OptionName = model.Name,
TCID = model.TC,
LsystemID= model.Lsystem
};
db.Option.Add(option);
db.SaveChanges();
return RedirectToAction("Index");
}
private void ConfigureViewModel(OptionVM model)
{
model.TCList = new SelectList(db.TC, "TCID", "TCName");
}
和视图
@model OptionVM
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.HiddenFor(m => m.Lsystem)
@Html.LabelFor(m => m.Name)
@Html.TextBoxFor(m => m.Name)
@Html.ValidationMesageFor(m => m.Name)
@Html.LabelFor(m => m.TC)
@Html.DropDownListFor(m => m.TC, Model.TCList, "Please select")
@Html.ValidationMesageFor(m => m.TC)
<input type="submit" ... />
}