Nano Hash - криптовалюты, майнинг, программирование

Природа ASP.NET MVC без сохранения состояния

это концептуальный вопрос.

Насколько я знаю, 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>

Я надеюсь, что не нарушу правила сайта, задав концептуальный вопрос. Если да, пожалуйста, скажите мне, чтобы я не делал этого снова.


  • Можете ли вы привести простой пример кода? 09.12.2011
  • Не могли бы вы увидеть сетевой трафик. Возможно дело в кешировании браузера 09.12.2011
  • @neontapir: Вот код. 09.12.2011

Ответы:


1

Вспомогательные HTML-помощники ASP.NET MVC будут использовать опубликованные значения для повторного создания формы. Если вы хотите убедиться, что значения вашей модели передаются в ваше представление, удалите их из состояния модели в вашем контроллере.

Вы можете использовать либо

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, и они будут повторно заполнены.

См. также этот вопрос.

09.12.2011
  • Но дело в том, что я не отправляю страницу, я никогда не дохожу до POST ActionResult. В любом случае, теперь я понимаю, о чем вы говорите, эта ссылка была действительно полезной. Если ASP.NET MVC реализует эти помощники HTML, то где природа без сохранения состояния, о которой они так много говорят? 09.12.2011
  • Вы загружаете страницу, отправляете и нажимаете F5? 09.12.2011
  • Но также, если я удалю значение из состояния модели (я думаю, это нужно сделать в GET ActionResult, где модель передается в представление()), как исходное значение будет отображаться в представлении? 09.12.2011
  • Нет, я загружаю, меняю значения (только в представлении), НЕ отправляю и перезагружаю. Значения должны вернуться в исходное неизмененное состояние, или я ошибаюсь? 09.12.2011
  • Во-первых, если вы отправляете форму, а затем нажимаете F5, в зависимости от вашего браузера, он просто обновит ваш текущий экран — это означает, что вы увидите все, что у вас было после того, как вы вернули страницу. Это НЕ выполняет HTTPGET. Во-вторых, когда вы удаляете свойство или свойства из ModelState, они не удаляются из вашей модели. Он удаляет его из значений POSTed. 09.12.2011
  • Вы правы, если вы не отправляете форму, значения должны вернуться в исходное состояние. 09.12.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..