2014-10-06 56 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綁定到模型。邏輯真的屬於模型。