我正在试图找出为什么以及如何编辑EditorFor缓存信息。
这是一个简单的程序,有两个textareas。一个用于输入,一个用于输出。输出文本区域的原因是它使选择所有副本更容易。
我的代码非常简单。首先我的控制器放置一些默认值
public ActionResult MoveCss()
{
MoveCssIO model = new MoveCssIO(); ;
model.InputCss = "Fish";
return View(model);
}
然后我的模型启动并输出输入的大写
[Required(ErrorMessage="Please provide some text to transform")]
[DataType(DataType.MultilineText)]
public string InputCss { get; set; }
private string _OutputCss;
[DataType(DataType.MultilineText)]
public string OutputCss {
get
{
Transform();
return _OutputCss;
}
set
{
_OutputCss = value;
}
}
private void Transform()
{
if (!string.IsNullOrWhiteSpace(InputCss))
{
_OutputCss = InputCss.ToUpper();
}
}
这是我的观点
##
@Html.Encode(Model.OutputCss)
$$
@Html.DisplayFor(model => model.OutputCss)
&&
@Html.EditorFor(model => model.OutputCss)
%%
所以在初始加载时我得到了
##
FISH
$$
FISH
&&
<textarea class="text-box multi-line" id="OutputCss" name="OutputCss">
FISH</textarea>
%%
然后我使用InputCss的编辑器(未显示)将InputCss上的值更改为ham
[HttpPost]
public ActionResult MoveCss(MoveCssIO model)
{
return View(model);
}
这将我的OutputCss设置为HAM并且页面重新加载(没有ajax)但是当我得到输出时
##
HAM
$$
HAM
&&
<textarea class="text-box multi-line" id="OutputCss" name="OutputCss">
FISH</textarea>
%%
我的问题是为什么Html.EditorFor中的值与Html.DisplayFor不同,我该如何解决这个问题?
更新:添加一点清晰度
答案 0 :(得分:5)
您的问题非常不清楚,但我怀疑您正在尝试修改POST操作中的某些值,并且在呈现视图时您仍然看到旧值。如果是这种情况,您需要将其从模型状态中删除,否则html帮助程序将始终绑定旧值:
[HttpPost]
public ActionResult MoveCss(MoveCssIO model)
{
// you are changing a POSTed value here so make sure
// you remove it from the model state or HTML helpers
// will use the original value
model.InputCss = "ham";
ModelState.Remove("InputCss");
return View(model);
}
另请注意,编辑/显示模板绝对没有缓存。