我有一個簡單的ASP.NET MVC 3虛擬應用程序(剛剛學習來自WebForms的MVC)。無DB持久性的簡單表單更新
而我很困惑如何更新表單,而實際上沒有一些數據庫之間的東西。我只是一個帶有文本框的表單,在按下按鈕之後,我想看到大寫的字符串。但我什麼也沒有發生。
控制器:
public ActionResult Index()
{
ToUppercaseModel model = new ToUppercaseModel { TheString = "testing" };
return View(model);
}
[HttpPost]
public ActionResult Index(ToUppercaseModel model)
{
model.TheString = model.TheString.ToUpper();
return View(model);
}
模型:
public class ToUppercaseModel
{
[Display(Name = "My String")]
public string TheString { get; set; }
}
和視圖:
@using (Html.BeginForm()) {
<div>
<div class="editor-label">
@Html.LabelFor(m => m.TheString)
</div>
<div class="editor-field">
@Html.TextBoxFor(m => m.TheString)
</div>
<p>
<input type="submit" value="Convert" />
</p>
</div>
}
這是一個SIM我認爲它是正確的。現在顯然第二個索引方法中的return View(model);
不起作用。我看到一些關於RedirectToAction()
的內容並將數據存儲在TempData
中。大多數例子只是提交一些ID,但因爲我沒有數據庫不起作用。
如果我這樣做:
return RedirectToAction("Index", model);
我得到這個對象定義的
無參數的構造函數。
錯誤消息。這應該很簡單,不是嗎?我想我理解Post/Redirect/Get這個概念,但是沒有看到如何將它應用於這樣簡單的事情。
感謝您的澄清。
謝謝。這工作。但基本上正確的方法是使用RedirectToAction?或不? – Remy 2011-12-28 13:51:19
@Remy不,返回張貼無效表單的正確方法是返回表單。 PRG模式用於在成功的表單發佈後返回視圖(以阻止人員刷新並重新提交成功的表單)。在TryValidateModel之後,您通常會在Block中測試ModelState.IsValid中的RedirectToAction – Chao 2011-12-29 10:33:27