我有以下幾點[HTTPGET] Create()方法家長信息:創建於MVC4子對象 - 不被傳遞給創建()控制器
public ActionResult Create(int? parentId)
{
var model = new CreatePersonViewModel();
// pull parent from db
var parent = _db.Persons.FirstOrDefault(s => s.Id == parentId);
model.Parent = parentSet;
return View("Create", model);
}
如果我創建從一個新的Person另一個人的Details頁面中,我傳入該父Person的ID,然後構造一個包含Parent的viewModel。
的POST看起來是這樣的:
[HttpPost]
public ActionResult Create(CreatePersonViewModel viewModel)
{
if (ModelState.IsValid)
{
var parent = viewModel.Parent; // This is always null for some reason
var person = new Person() { Name = viewModel.Name };
// if it has a parent, build new relationship
if (parent != null)
{
person.Parent = parent;
parent.Children.Add(person);
};
_db.Save();
return RedirectToAction("detail", "person", new { personId = person.Id });
}
return View(viewModel);
}
出於某種原因,視圖模型得到推回POST方法不會包含在GET控制器方法中定義的父。我如何告訴MVC將父母從GET推送到POST,而不會讓父視圖隱藏一個隱藏字段?
萬一有幫助,我的觀點是在這裏:
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>CreatePersonViewModel</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
我錯了,認爲這不雅?我覺得我應該能夠告訴服務器將數據直接傳遞給相應的POST方法,而不是發送與客戶端無關的數據(並且不必要地將數據公開給攻擊者)。我錯過了什麼嗎? – user2062383 2013-02-17 04:35:40
@ user2062383:是;這不可能。 POST來自客戶端;你不能告訴客戶發送一些東西而不發送給客戶端。考慮使用服務器端會話狀態。 – SLaks 2013-02-18 21:54:56