ASP.NET MVC无状态自然

时间:2011-12-09 05:18:27

标签: asp.net-mvc-3 stateless

这是一个概念性问题。

据我所知,MVC具有无国籍的性质。 当我在浏览器中点击重新加载(F5)时,我在视图中编写或更改的值不会消失,也不会被模型中的原始值替换。

有谁知道为什么会这样? 我假设在我重新加载页面的那一刻,修改后的“未提交”值应该消失。

我的观点只是剃刀代码......我不使用网页表单(我的意思是,我的应用程序中没有.aspx页面)


@model PruebaMVC.Models.DatosLINQ.OPERACION

@{
    ViewBag.Title = "Edit";
}

<h2>Editar Operación</h2>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Operación</legend>

        @Html.HiddenFor(model => model.IDOperacion)

        <div class="editor-label">
            @Html.LabelFor(model => model.FechaOperacion, "Fecha de la Operación")
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.FechaOperacion)
            @Html.ValidationMessageFor(model => model.FechaOperacion)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Comision, "Comisión")
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Comision)
            @Html.ValidationMessageFor(model => model.Comision)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Legajo, "Número de Legajo")
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Legajo)
            @Html.ValidationMessageFor(model => model.Legajo)
        </div>

        <p>
            <input type="submit" class="formbutton" value="Guardar Cambios" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Volver al listado de Operaciones", "Index")
</div>

我希望不要通过提出概念性问题来对网站施加任何规则。如果我,请告诉我,所以我不再这样做了。

1 个答案:

答案 0 :(得分:1)

ASP.NET MVC HTML帮助程序将使用发布的值重新创建表单。如果要确保将模型的值推送到视图中,请将其从控制器中的模型状态中删除。

您可以使用

public ActionResult MyController (MyModel model)
{
    if (ModelState.IsValid)
    {
        ModelState.Clear ();
    }

    return View (model);
}

或者您可以删除要更新的特定项目

public ActionResult MyController (MyModel model)
{
    if (ModelState.IsValid)
    {
        ModelState.Remove ("PropertyNameToRemove");
    }

    return View (model);
}

我不确定你在哪里进行更新(无论是在控制器中手动还是在模型本身中),但你只需要从ModelState中删除任何或所有项目,它们将被重新填充。

See this question, as well