2014-10-06 2 views
0

Мое мнение, что пользователь вводит значения в форму. Эти значения передаются контроллеру, в котором я использую dbset для создания новой строки в моей таблице. Существует одно поле, которое служит флагом для этой строки, который я не хочу, чтобы пользователь определял/даже знал, что существует. Мой вопрос в том, как я могу присвоить данные этому полю и передать его контроллеру без необходимости ввода данных? В этом случае я хочу, чтобы поле ACTION_TYPE было присвоено значение/строка «Добавить».Назначить статическое значение полю в модели

Посмотреть

@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

Создайте viewmodel, чтобы достичь того, чего вы хотите. – marcoaoteixeira

ответ

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(); 

Или вы даже можете установить его по умолчанию в самой модели (которая в идеале, где логика, как это идет), конструкция которого будет очень сильно зависят от вашей структуры модели. Значение по умолчанию может быть задано в конструкторе или в конце привязки в свойстве, или, возможно, путем разделения понятий «добавление» и «редактирование» на свои собственные модели.

В любом случае, это не должно быть на вид. Даже в качестве скрытого поля любой пользователь может изменить это значение, когда захочет. Единственный способ для вашего кода правильно контролировать значение - сохранить его на стороне сервера.


Как и в сторону, в любое время вы объявляете переменную на стороне сервера в представлении, то вы, скорее всего, делает что-то неправильно. В представлениях не должно быть бизнес-логики, они просто привязывают интерфейс к модели. Логика действительно принадлежит модели.

Смежные вопросы