2014-10-06 80 views
0

我的视图让用户将值输入到表单中。这些值传递给控制器​​,我使用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

创建一个视图模型来实现你想要的。 – marcoaoteixeira 2014-10-06 13:37:34

回答

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绑定到模型。逻辑真的属于模型。

相关问题