我的视图让用户在表单中输入值。这些值传递给控制器,我在其中使用dbset在表中创建新行。有一个字段用作该行的标志,我不希望用户定义/甚至知道存在。我的问题是,如何在不让用户提供输入的情况下将数据分配给该字段并将其传递给控制器?在这种情况下,我希望为ACTION_TYPE字段分配值/字符串“Add”。
查看
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
var action = Html.HiddenFor(model => model.ACTION_TYPE.ToString());
string val = "Add";
if (action == null){
action = MvcHtmlString.Create(val);
}
控制器
public ActionResult Create()
{
return View();
}
//
// POST: /Table8/Create
[HttpPost]
public ActionResult Create(HOLIDAY_DATE_TABLE holiday_date_table, tbl8_update_transactions tbl8_update_transaction)
{
if (ModelState.IsValid)
{
db.HOLIDAY_DATE_TABLE.Add(holiday_date_table);
db.SaveChanges();
db.tbl8_update_transactions.Add(tbl8_update_transaction);
db.SaveChanges();
return RedirectToAction("../Billing/HolidayDateTable");
}
return View(holiday_date_table);
}
表
CREATE TABLE HOLIDAY_DATE_TABLE
(
HID INT IDENTITY PRIMARY KEY,
TABLE_NUMBER nchar(2) NOT NULL,
HOLIDAY_DATE nchar(8) NOT NULL,
FIELD_DESCRIPTION nVARchar(43) NULL,
ACTION_TYPE nchar(6) NULL
);
CREATE TABLE tbl8_update_transactions
(
TID INT IDENTITY PRIMARY KEY,
TABLE_NUMBER nchar(2) NOT NULL,
HOLIDAY_DATE nchar(8) NOT NULL,
FIELD_DESCRIPTION nVARchar(43) NULL,
ACTION_TYPE nchar(6) NULL,
HID int,
FOREIGN KEY (HID) REFERENCES HOLIDAY_DATE_TABLE (HID) ON DELETE CASCADE
);
答案 0 :(得分:0)
如果用户没有输入此数据,则它不属于用户提交的表单。完全从视图中删除它并在服务器端代码中设置它。一个简单的方法是在控制器操作中:
// completely guessing on types/models here, but you should get the idea...
holiday_date_table.ActionType = "Add";
db.HOLIDAY_DATE_TABLE.Add(holiday_date_table);
db.SaveChanges();
或者你甚至可以在模型本身默认设置它(理想情况下这就是这样的逻辑),其设计将在很大程度上取决于你的模型结构。可以在构造函数中设置默认值,也可以在属性中设置后期绑定值,或者可以通过分隔"添加"的概念来设置默认值。与"编辑"进入自己的模特。
无论哪种方式,它都不应该在视图中。即使作为隐藏字段,任何用户都可以随时更改该值。代码真正控制值的唯一方法是保持服务器端。
顺便说一句,每当您在视图中声明服务器端变量时,您很可能做错了什么。视图不应该具有业务逻辑,它们只是将UI绑定到模型。逻辑确实属于模型。