Передача нескольких моделей контроллеру в actionresult create

Я создал четыре модели, затем я создал модель представления, которая содержит первые четыре, я создал представление с контроллером, которое показывает эту модель представления;

Когда я создал Actioresult Create (http-сообщение), я не знал, как передать всю модель.

viewModel:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Avvisi.Models
{
public class PianoCompletoViewModels
{
public Guid Id { get; set; }
public DatiPiano DatiPiano { get; set; }
public DescrizionePiano descrizionePiano { get; set; }
public ImpresaBeneficiaria impresaBeneficiaria { get; set; }
public ResponsabilePiano responsabilePiano { get; set; }
public ProspettoFinanziario prospettoFinanziario { get;set; }
}
}

контроллер:

public ActionResult Create()
   {
string UserID = Convert.ToString(User.Identity.GetUserId());
int AvvisoID = Convert.ToInt32(Session["AvvisoID"]);
ViewBag.FKCompartoID = new SelectList(db.Comparto, "CompartoID", 
"Nome");
 ViewBag.PianoID = new SelectList(db.DescrizionePiano, 
"DescrizioneID", "PresentImpBenef_RelContAziend");
 return View();
 }
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(PianoCompletoViewController PianoView)
{
if (ModelState.IsValid)
{
return View();
}
return View();
}

Я ожидаю, что когда я нажимаю на «Отправить», появляется модель, заполненная свойством (другие модели). Например:

PianoView.model1.xxx
PianoView.model2.xxx
PianoView.model3.xxx
PianoView.model4.xxx

cshtml просмотр:

@model Avvisi.Models.PianoCompletoViewModels

@{
    ViewBag.Title = "Create";
}

<h2>Dati Piano</h2>

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

<div class="form-horizontal">
    <h4>Dati Piano</h4>

    @Html.ValidationSummary(true, "", new { @class = "text-danger" })

<div class="row" style="margin-left:0px;margin-right:0px">
        <div class="form-group">
            @Html.LabelFor(model => model.DatiPiano.NomePiano, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.DatiPiano.NomePiano, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.DatiPiano.NomePiano, "", new { @class = "text-danger" })
            </div>
        </div>
    </div>

 <div class="form-group">
            @Html.LabelFor(model => model.descrizionePiano.PresentImpBenef_RelContAziend, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.descrizionePiano.PresentImpBenef_RelContAziend, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.descrizionePiano.PresentImpBenef_RelContAziend, "", new { @class = "text-danger" })
            </div>
        </div>

    <div class="row">
        <div class="form-group">
            @Html.LabelFor(model => model.impresaBeneficiaria.CompanyName, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.impresaBeneficiaria.CompanyName, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.impresaBeneficiaria.CompanyName, "", new { @class = "text-danger" })
            </div>
        </div>
    </div>

  <div class="form-group">
            @Html.LabelFor(model => model.responsabilePiano.Nome, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.responsabilePiano.Nome, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.responsabilePiano.Nome, "", new { @class = "text-danger" })
            </div>
        </div>
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Create" class="btn btn-default" style="width:95%;background: #dedede;" />
        </div>
    </div>
</div>
}

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

Не могли бы вы мне помочь???

0
0
45
1

Ответы 1

Вы должны использовать имя элемента управления html следующим образом:

<input name="descrizionePiano.someProperty">

Тогда вы, несомненно, получили за это цену.

Никаких проблем нет в html, я обновил свой основной пост; Проблема заключается в отправке «события», когда httpost запускается для создания представления, я бы хотел передать свою модель представления, но я не могу получить доступ к его свойству. если я напишу общедоступный ActionResult Create (PianoCompletoViewController pianoView), я ожидаю, что pianoview содержит свойство модели, в этом случае мне нужно pianoview.datipiano, pianoview.descrizionepiano и т.д., но когда я пишу pianoview после точечной нотации, свойств нет .

Fabio 12.08.2018 12:50

Другие вопросы по теме