Mar*_*ark 3 c# asp.net-mvc asp.net-mvc-4
我试图从文本框中取一个输入,替换其中的一些字符串 - 并将原始和替换字符串返回到视图,并填充两个单独的文本框.
我的简单视图模型是:
public class WordsToConvert
{
public string Original { get; set; }
public string Replacement { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的cshtml文件有一个表单,当Post返回到同一视图时,它与我想要填充的表单相同:
@Html.EditorFor(model => model.Original,
new { htmlAttributes = new { @class = "form-control" } })
@Html.EditorFor(model => model.Replacement,
new { htmlAttributes = new { @class = "form-control" } })
Run Code Online (Sandbox Code Playgroud)
我的控制器非常简单(只是为了开始):
// POST: WTC
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult WTC([Bind(Include = "Original,Replacement")] WordsToConvert wordsToConvert)
{
if (ModelState.IsValid)
{
wordsToConvert.Replacement = "Test " + wordsToConvert.Original;
return View(wordsToConvert); // <---- at this point Watch shows wordsToConvert.Replacement as "Test whatever other text"
}
return View(wordsToConvert);
}
Run Code Online (Sandbox Code Playgroud)
我可以在VS的Watch窗口中看到wordsToConvert.Replacement更改 - 但是当View再次显示它时,它是空白的.
如果我将@ Model.Replacement添加到视图中 - 那么我可以在前面看到更新的"原始"和"Test - xxxxx".
有什么办法可以让替换文本显示在替换文本框/ EditorFor中吗?
谢谢,马克
这是MVC中众所周知的问题.
ModelState.Clear();
Run Code Online (Sandbox Code Playgroud)
将解决问题.如果您只想定位一个字段,也可以单独执行此操作:
ModelState.Remove("Replacement");
Run Code Online (Sandbox Code Playgroud)
原因很复杂,并且与MVC团队在大多数情况下为人们做出正确的事情做出的选择有关(但有时这对某些人来说是错误的).
| 归档时间: |
|
| 查看次数: |
890 次 |
| 最近记录: |