2011-03-14 85 views
0

我试图弄清为什么EditorFor Caches为什么以及如何缓存信息。Html.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值火腿

[HttpPost] 
    public ActionResult MoveCss(MoveCssIO model) 
    { 
     return View(model); 
    } 

这为我设置OutputCss和腌肉的页面做了重载(没有AJAX),但是当我得到的输出是

## 
HAM 
$$ 
HAM 
&& 
<textarea class="text-box multi-line" id="OutputCss" name="OutputCss"> 
FISH</textarea> 
%% 

我的问题是为什么Html.EditorFor中的值与Html.DisplayFor不同,我该如何解决这个问题?

更新:增加一点透明度

回答

5

你提的问题是非常不清楚,但我怀疑你正试图修改一个POST操作的一些价值,你仍然看到旧值时,视图渲染。如果这是你需要从ModelState中或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); 
} 

另外请注意,是绝对没有缓存参与编辑/显示模板。

+0

我以为他们只是从错误的模型状态使用,否则使用模型值。 – tvanfosson 2011-03-14 23:02:41

+0

谢谢。我没有意识到ModelState具有“功能” – Jeff 2011-03-14 23:25:57

+0

我添加了ModelState.Remove(“OutputCss”);这似乎修复了它 – Jeff 2011-03-14 23:26:57