【问题标题】:Passing whole model to controller from view via link通过链接将整个模型从视图传递给控制器
【发布时间】:2014-04-03 14:26:27
【问题描述】:

我想将整个模型传递给控制器​​。现在它什么也没通过,我不知道为什么。模型在到达此页面时已部分填充,因此它至少应该包含一些信息。

问题:当我点击视图上的按钮时,模型没有传递给控制器​​。甚至没有填充的部分!

视图(包含部分填充的模型)

@{
    ViewBag.Title = "Winkelmand";
    Layout = "~/Views/Shared/_Layout3.cshtml";
}
@model IntroSport.Models.Bestel

<br />

<br />
@if (Model.winkelmand.facturen != null)
{
    <table style=" width:auto; height:auto; border-style:solid; border-color:black;">
    <tr><th>Artikelnummer</th><th>Merk</th><th>Naam</th><th>Prijs</th><th>Aantal</th></tr>
    @for (int i = 0; i < Model.winkelmand.facturen.Count; i++)
    { 
        <tr>
        <td>@Model.winkelmand.facturen[i].product.ProductID</td>
        <td>@Model.winkelmand.facturen[i].product.Merk</td>
        <td>@Model.winkelmand.facturen[i].product.Naam</td>
        <td>€@Model.winkelmand.facturen[i].product.Prijs</td>
        <td >@Model.winkelmand.facturen[i].Aantal</td>
        </tr>
    }
    </table>
}
<br />
<hr />
<b>Totaal: </b>€ @Model.winkelmand.Totale_prijs

<a href="@Url.Action("Klantoverzicht", "Winkelmand", Model)">Bestel!</a>

控制器:

    public ActionResult KlantOverzicht(Bestel bestel)
    {
        return View(bestel);
    }

【问题讨论】:

    标签: c# asp.net asp.net-mvc-3


    【解决方案1】:

    您不能简单地将整个模型提供到 @Url.Action 并让它创建与模型中每个字段的链接。

    您基本上需要“手动”创建链接!

    从您所拥有的视图来看,用户似乎没有更改任何信息,并且很可能是您从数据库中提取了正在显示的信息,因此,如果您确实创建了传递到模型中的链接,则信息将匹配您数据库中的数据。

    我的建议是,不要将未更改的模型发布到服务器,而只需将对象的 Id 传递到视图中,然后让视图从数据库中检索对象。

    <a href="@Url.Action("Klantoverzicht", "Winkelmand", new { id = Model.Id })">Bestel!</a>
    

    【讨论】:

    • 感谢您的回复。关于我如何创建此代码及其背后的代码,您是绝对正确的。事情是; Bestel 模型由另外两个模型组成(比方说,模型 A 和模型 B)。模型 A 可以从数据库中检索,但模型 B 不能,在用户按下链接后看到模型 B 尚未填写。
    【解决方案2】:

    您可以使用&lt;form&gt;Model 发送到控制器。

    或通过链接发送所有属性,然后将它们收集到新模型中。

    <a href="@Url.Action("Klantoverzicht", "Winkelmand", 
             new { 
                   pId = Model.ProductID,
                   mark = Model.Merk,
                   name = Model.Naam,
                   price = Model.Prijs,
                   number = Model.Aantal,
                 })">Bestel!</a>
    

    在行动:

    public ActionResult KlantOverzicht(int pId, string mrk, string nam, double price, int number    )
    {
      Bestel model = new Bestel();
      model.ProductID = pId;
      model.Merk = mark;
      model.Naam = name;
      model.Prijs = price;
      model.Aantal = number;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多