Squeak.ru - шаблоны программирования

Загрузка разных моделей в частичные виды

Мой основной вид использует

@model IEnumerable<Ortund.Models.Reward>

Я пытаюсь позволить пользователю делать несколько вещей в этом представлении, не уходя от него.

В частности, я хочу, чтобы пользователь мог делать следующее:

  • Просмотр вознаграждений, которые он/она уже получил (вознаграждения, которые этот пользователь имеет право использовать)
  • Получите новую квитанцию ​​и при этом добавьте награду, связанную с этой квитанцией, к своим текущим наградам.
  • Использовать часть вознаграждений, на которые он/она имеет право, или все сразу

Для этого я использую частичные представления, так как могу установить новую модель для каждого частичного представления.

Это выглядит примерно так:

/Главная/Индекс

if (Request.Cookies["Ortund"] == null)
{
    // render a login form
}
else
{
    <p>@String.Format("Welcome, {0}!", Convert.ToString(Request.Cookies["Ortund"]["username"])) <a id="claim-link">Claim New</a> | <a id="redeem-link">Redeem</a></p>

    @Html.Partial("_RewardsView")

    <!-- Render the new claim and redemption views as well -->
    <div class="claim-new">
        @Html.Partial("_ClaimsView")
    </div>
    <div class="redemption">
        @Html.Partial("_RedemptionView")
    </div>

_RewardsView

@model IEnumerable<Ortund.Models.Reward>
....

_ClaimsView

@model Ortund.Models.Receipt
....

_RedemptionView

@model IEnumerable<Ortund.Models.Reward>
....

Я понимаю, что модели представления являются предпочтительным подходом, но, поскольку я еще не понял, как правильно их использовать, я использую этот подход.

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

Я не совсем уверен, что с этим делать, кроме как создавать формы вручную без привязки к моделям, а скорее отправлять их правильному контроллеру...

18.08.2015

Ответы:


1

Что, если вы используете одну модель, но строите так:

public class MainModel{
   public fakeOneModel fakeModelOneView{get; set;}
   public fakeTwomodel fakeModelTwoView{get; set;}
   public fakeThreemodel fakeModelThreeView{get; set;}
}

public class fakeOneModel{
    public string objectA1 {get; set;}
    public string objectA2 {get; set;}
    public string objectA3 {get; set;}
}

public class fakeTwoModel{
    public string objectB1 {get; set;}
    public string objectB2 {get; set;}
    public string objectB3 {get; set;}
}

public class fakeThreeModel{
    public string objectC1 {get; set;}
    public string objectC2 {get; set;}
    public string objectC3 {get; set;}
}

Затем из ваших представлений вы можете получить доступ ко всем классам из одной модели, например:

@Html.LabelFor(m=>m.fakeModelOneView.objectA1 )
@Html.TextBoxFor(m=>m.fakeModelOneView.objectA1 )
@Html.LabelFor(m=>m.fakeModelTwoView.objectB1 )
@Html.TextBoxFor(m=>m.fakeModelTwoView.objectB1 )
@Html.LabelFor(m=>m.fakeModelThreeView.objectC1 )
@Html.TextBoxFor(m=>m.fakeModelThreeView.objectC1 )
18.08.2015

2

По умолчанию частичное представление, визуализируемое вызовом @Html.Partial("PartialViewName"), использует модель представления родительского представления.

Модель для вашей главной страницы должна включать в себя модели, которые вы передадите в частичные представления:

Модель:

public class IndexModel
{
    public Ortund.Models.Receipt Receipt { get; set; }
    public IEnumerable<Ortund.Models.Reward> ClaimedRewards { get; set; }
    public IEnumerable<Ortund.Models.Reward> EligibleRewards { get; set; }
}

Просмотр:

Когда вы вызываете частичное представление, укажите модель, которую вы ему передадите, например

@model IndexModel

@Html.Partial("_RewardsView", Model.ClaimedRewards)
@Html.Partial("_ClaimsView", Model.Receipt)
@Html.Partial("_RedemptionView", Model.EligibleRewards)

Наличие нескольких форм на одной странице — еще одна проблема. См. несколько форм на одной странице ASP.net MVC

18.08.2015
  • Итак, вкратце: использовать модель представления? 18.08.2015

  • 3

    Итак, вкратце: использовать модель представления?

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

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

    Контроллер

    [ChildActionOnly]
    public ActionResult Rewards()
    {
        // fetch rewards
    
        return PartialView("_Rewards", rewards)
    }
    

    Просмотреть

    @Html.Action("Rewards")
    
    18.08.2015

    4

    Если вы хотите использовать ajax для обновления представлений, вы можете попробовать MultiPartials. С дополнительным преимуществом, заключающимся в том, что они будут обновлять любые элементы, которые вы определяете с помощью идентификаторов, это означает, что вы можете обновлять несколько div с данными и не беспокоиться об управлении сложными моделями представлений.

    @Ajax.ActionLink("ActionLink", "ActionLinkClick", new AjaxOptions { OnSuccess = "MultipartialUpdate" })
    
    public ActionResult ActionLinkClick()
    {
         MultipartialResult result = new MultipartialResult(this);
    
          result.AddView("_Div1", "Div1", new Div1Model("ActionLink clicked"));
          result.AddView("_Div2", "Div2", new Div2Model("ActionLink clicked"));
          result.AddContent("ActionLink", "LastClickedSpan");
          result.AddScript("alert ('ActionLink clicked');");
    
         return result;
    

    }

    Тогда в поле зрения

    @using(Ajax.BeginForm("FormSubmit", new AjaxOptions { OnSuccess =      "MultipartialUpdate" }))
    {
          <input type="submit" value="Submit">
    }
    

    Этот фрагмент кода взят из вышеупомянутой ссылки, и вы можете создать как можно больше частей без необходимости создавать сложный код для управления ими всеми.

    18.08.2015
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...