0

これは概念的な質問です。

私の知る限り、MVCにはステートレスな性質があります。ブラウザでリロード(F5)を押すと、ビューで書き込んだり変更したりした値が消えたり、モデルの元の値に置き換えられたりすることはありません。

なぜこれが起こっているのか誰かが知っていますか?ページをリロードした瞬間に、変更された「未送信」の値が消えると思います。

私の見解はかみそりのコードだけです...私はWebフォームを使用していません(つまり、私のアプリケーションには.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>

概念的な質問をすることによってサイトの規則を負わせないことを望みます。もしそうなら、教えてください、そうすれば二度とこれをしません。

4

1 に答える 1

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からアイテムの一部またはすべてを削除するだけで、それらが再入力されます。

この質問も参照してください

于 2011-12-09T05:36:58.623 に答える