提问者:小点点

如何在一个视图中使用不同的模型并将值传递给controller


我有一个视图,需要从该视图将id_cliente传递给Controller。

这是我的模型:

 public class Cliente
    {
        [Key]
        public int Id { get; set; }
        [Display(Name = "Azienda")]
        public string Nome_azienda { get; set; }
    }

 public class SottoCliente
    {
        [Key]
        public int Id { get; set; }
        public int Id_cliente { get; set; }
    }

在我的视图中,通过单击按钮Sotto Clienti,我需要将ID_cliente从模型SottoCliente传递给控制器。 我不知道如何访问id_cliente。 这是我的看法:

@model IEnumerable<GestioneAtivita.Models.Cliente>

<table class="table">
    <thead>
        <tr>
            <th>
               ...
            </th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Nome)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Cognome)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Nome_azienda)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Cellulare)
            </td>
            <td>
                //Here I have button, and here I need somthing like  new { clienteId = item.`Id_cliente`} to pass Id_cliente to controller
                @Html.ActionLink("Sotto Clienti", "CaricaSottoCliente", new { clienteId = item.Id}, new { @class = "btn btn-danger" })
            </td>
            <td> 
                @Html.ActionLink("Modifica", "ModificaCliente", new { id = item.Id }, new { @class = "btn btn-primary" }) |
                @Html.ActionLink("Elimina", "EliminaCliente", new { id = item.Id }, new { @class = "btn btn-danger" })
                </td>
            </tr>
        }
    </tbody>
</table>

CaricaSottoCliente是我尝试从基于Id_cliente的数据库加载记录的操作:

public async Task<IActionResult> CaricaSottoCliente(int clienteId)
        {
          //var getsottoCliente = await _db.tboSottoClienti.FindAsync(id);

            var sottoCliente = await _db.tboSottoClienti
                .Where(c => c.Id_cliente == clienteId)
                .FirstOrDefaultAsync();

            return View(sottoCliente);

一切都很好,但是我没有得到Id_cliente,而是从Client model得到Id。

如何将Id_cliente传递给控制器?

提前谢谢!


共2个答案

匿名用户

您可以像这样创建另一个类。

public class Parent
{
    public Cliente Cliente { get; set; }
    public SottoCliente SottoCliente { get; set; }
}

public class Cliente
{
    [Key]
    public int Id { get; set; }
    [Display(Name = "Azienda")]
    public string Nome_azienda { get; set; }
}

public class SottoCliente
{
    [Key]
    public int Id { get; set; }
    public int Id_cliente { get; set; }
}

并在模型中声明如下@model IEnumerable,并相应地使用属性。

匿名用户

您需要创建一个同时包含类SottoCliente和Cliente的ViewModel。

public class ClientViewModel
{
    public Cliente Cliente { get; set; }
    public SottoCliente SottoCliente { get; set; }
}

public class Cliente
{
    [Key]
    public int Id { get; set; }
    [Display(Name = "Azienda")]
    public string Nome_azienda { get; set; }
}

public class SottoCliente
{
    [Key]
    public int Id { get; set; }
    public int Id_cliente { get; set; }
}

在视图中访问如下字段

@model IEnumerable<GestioneAtivita.Models.ClientViewModel>

<table class="table">
    <thead>
        <tr>
            <th>
               ...
            </th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Cliente.Nome)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Cliente.Cognome)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Cliente.Nome_azienda)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Cliente.Cellulare)
            </td>
            <td>
                //Here I have button, and here I need somthing like  new { clienteId = item.`Id_cliente`} to pass Id_cliente to controller
                @Html.ActionLink("Sotto Clienti", "CaricaSottoCliente", new { clienteId = item.SottoCliente.Id}, new { @class = "btn btn-danger" })
            </td>
            <td> 
                @Html.ActionLink("Modifica", "ModificaCliente", new { id = item.Cliente.Id }, new { @class = "btn btn-primary" }) |
                @Html.ActionLink("Elimina", "EliminaCliente", new { id = item.Cliente.Id }, new { @class = "btn btn-danger" })
                </td>
            </tr>
        }
    </tbody>
</table>

相关问题