jay gandhi Ответов: 1

Как можно объединить две разные модели в один вид в MVC


@модель layout_wise_minicrm.Модели.Bigviewmodel

1-я модель(Task_info)
@использование (в формате HTML.Бигинформ("задача", "ЦРМ", FormMethod.Почта))
{




@**@

@Html. EditorFor(model = & gt; model.Taskinfo.Имя_задачи, новый { htmlAttributes = новый { @класс = "форма контроля", заполнитель = "Название задачи", необходимо = "требуется" } })


}
2-я модель (событие)
@использование (в формате HTML.Бигинформ("событие", "ЦРМ", FormMethod.Почта))
{


@Html. EditorFor(model = & gt; model.Событие.Event_title, новый { htmlAttributes = новый { @класс = "форма контроля", заполнитель = "название мероприятия", необходимые = "требуется" } })


}

Что я уже пробовал:

публичный класс Bigviewmodel
{
публичное событие Event{ get; set; }
public Taskinfo Taskinfo { get; set; }
}

Но, в момент вставки валидации сущности произошла ошибка. как можно ее решить

F-ES Sitecore

Недостаточно информации, чтобы помочь, мы не знаем, что такое проверка на моделях. Как бы то ни было, вы, вероятно, захотите поместить все элементы EditFor в одну и ту же форму, а не иметь две. С двумя формами будет отправлена только одна, поэтому, если вы отправите событие, у вас нет данных Taskinfo, или если вы отправите Taskinfo, у вас нет данных о событии, поэтому, если какое-либо из этих полей является обязательным, оно не будет выполнено.

jay gandhi

использование системы;
использование системы.Коллекции.Общий;
использование System. Linq;
использование системы.Сеть;

пространство имен layout_wise_minicrm. Models
{
публичный класс Bigviewmodel
{
публичное событие Event{ get; set; }
public Taskinfo Taskinfo { get; set; }
}
}

это мастер-модель, содержащая две модели 1. Task_info 2. Событие и я хочу поместить их две модели в один единственный вид это означает, что я хочу получить доступ к обеим моделям propperties в моем единственном виде как я могу это сделать, пожалуйста, предложите мне ... когда я использовал такие вещи, все еще возникали ошибки, такие как ошибка сущности проверки..

Richard Deeming

Как выглядят ваши пост-действия? Я предполагаю, что они берут только либо Event или Task введите в качестве параметра, а не Bigviewmodel типаж?

1 Ответов

Рейтинг:
0

Richard Deeming

Я предполагаю, что ваши пост-действия выглядят примерно так:

public ActionResult Event(Event value) ...
public ActionResult Task(Taskinfo value) ...

Проблема в том, что имена для EditorFor поля имеют префикс с именем свойства from Bigviewmodel:
<input name="Event.Event_title" ... />

Это сработало бы, если бы ваше почтовое действие ожидало Bigviewmodel параметр. Но так как он ожидает Event параметр, связыватель модели ищет имена полей, соответствующие свойствам на Event класс, необязательно с префиксом имени параметра. Так что либо Event_title или value.Event_title.

Есть несколько способов обойти это.

Самый простой вариант-изменить имена параметров в ваших методах, чтобы они соответствовали именам свойств в ваших методах. Bigviewmodel. (Он не чувствителен к регистру, поэтому вы все равно можете использовать имена параметров в верблюжьей оболочке со свойствами в оболочке Pascal.)
public ActionResult Event(Event @event) ...
public ActionResult Task(Taskinfo taskInfo) ...

NB: Вам нужно @ префикс на event имя параметра, так как это ключевое слово C#.

Кроме того, вы можете использовать префикс привязки:
public ActionResult Event([Bind(Prefix = "Event")] Event value) ...
public ActionResult Task([Bind(Prefix = "Taskinfo")] Taskinfo value) ...


Или вы можете переместить свои две формы в частичные представления:
@model layout_wise_minicrm.Models.Bigviewmodel
@Html.Partial("Task_info", Model.Taskinfo)
@Html.Partial("Event", Model.Event)

Task_info.cshtml по:
@model layout_wise_minicrm.Models.Taskinfo

@using (Html.BeginForm("Task", "crm", FormMethod.Post))
{
    ...
    @Html.EditorFor(model => model.Task_name, new { ... })
    ...
}

Событие.cshtml по:
@model layout_wise_minicrm.Models.Event

@using (Html.BeginForm("Event", "crm", FormMethod.Post))
{
    ...
    @Html.EditorFor(model => model.Event_title, new { ... })
    ...
}

(Если только вы не возьмете специальные меры[^], этот EditorFor расширения в частичном представлении не включают префикс из родительской модели представления.)