【问题标题】:ASP.NET "asp-route" Tag Helper polymorfismeASP.NET“asp-route”标签助手多态
【发布时间】:2019-11-27 19:22:29
【问题描述】:

所以我有一个名为 Item 的父类:

public class Item {
    public Guid Id {get; set;}
    public double Price {get; set;}
}

Bread 和 Cookie 类继承自该类:

public class Bread : Item {
    public string Type {get; set;}
}
public class Cookie : Item {
    public string Flavour {get; set;}
    public string Size {get; set;}
}

我在带有“AddToCart”按钮的 Razor 视图的表格中显示这些内容。

@using Data.Entities
@model ViewModels.CookieIndexViewModel

@{
    ViewBag.Title = "Cookie list";
}

<h1>Our collection of cookies:</h1>

<table class="table">

    @foreach (var cookie in Model.Cookies)
    {
        <tr>
            <td>@cookie.Flavour</td>
            <td>@cookie.Size</td>
            <td>@cookie.Price</td>
            <td><a class="btn btn-primary text-white" asp-action="AddItem" asp-controller="Cart" asp-route-item="@cookie">Purchase</a></td>
        </tr>

    }
</table>

在 CartController 中,我有 AddItem 方法,它以 Item 作为参数

public IActionResult AddItem(Item item)
{
    return View();
}

但这不起作用,因为 Cookie 无法转换为 Item 有什么提示可以做到这一点吗?

【问题讨论】:

  • 我在您的父类“Item”或子类“Cookie”中都看不到任何“Size”属性。您希望它如何出现在视图中?
  • 哦,那个在 cookie 类中,我忘了添加那个。我现在编辑它。

标签: asp.net-mvc polymorphism tag-helpers


【解决方案1】:

但这不起作用,因为 Cookie 无法转换为 Item 有关如何执行此操作的任何提示?

这不是这里的问题。您要做的是将模型(复杂类型)填充到单个参数中。这不是 http 查询参数的工作方式,也不是 MVC 模型绑定的工作方式。

采取你的控制器行动:

public IActionResult AddItem(Item item)

这不会尝试绑定名为item 的单个属性。它将尝试解析模型的属性idprice)。所以你需要单独传递这些。

我的解决方案是只传递项目 id。为什么你需要传递价格?这是一个安全问题。有人可能会更改请求中的价格!?

        <tr>
            <td>@cookie.Flavour</td>
            <td>@cookie.Size</td>
            <td>@cookie.Price</td>
            <td><a class="btn btn-primary text-white" asp-action="AddItem" asp-controller="Cart" asp-route-id="@cookie.Id">Purchase</a></td>
        </tr>
public IActionResult AddItem(Guid id)
{
    //lookup item 
    //add to cart

    return View();
}

【讨论】:

    猜你喜欢
    • 2019-06-16
    • 1970-01-01
    • 2018-04-03
    • 2019-11-02
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多