Html.EditorFor进程如何更改模型

时间:2011-03-14 22:51:29

标签: asp.net-mvc-3 razor

我正在试图找出为什么以及如何编辑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不同,我该如何解决这个问题?

更新:添加一点清晰度

1 个答案:

答案 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);
}

另请注意,编辑/显示模板绝对没有缓存