【问题标题】:MVC dynamic pages from list列表中的 MVC 动态页面
【发布时间】:2015-03-19 16:24:41
【问题描述】:

我有一个代表来自ICollection<> 模型的数据的页面,它为ICollection<> 中的每个项目生成@Html.BeginForm() 并使用@Html.Labels 显示数据,我想创建一个从每个表单到项目详细信息的链接,所以就像,当我按下带有 id=4 项目的表单时,它会将Model.ElementAt(4) 作为模型发送到新页面并显示它。我该怎么做?

编辑:我想我需要添加类似@Html.ActionLink("DetailsPage","Shops",shop)

@using WebShops
@model ICollection<WebShops.Shop>
@foreach (Shop shop in Model)
{
    using (Html.BeginForm())
    {
        @Html.Label(shop.name)
        @Html.Display(shop.name)
        <br />
        @Html.Label(shop.image)
        @Html.Display(shop.image)
        <hr />
    }
}

【问题讨论】:

    标签: c# razor model-view-controller


    【解决方案1】:

    要显示特定项目,不需要Html.BeginForm,因为它会发出POST 请求,而您需要发出GET 请求。

    您需要创建一个将使用GET 请求的新操作。

    public ActionResult Shop(string id)
    {
         var shop =  //get shop by id from database
         return View(shop)
    }
    

    您像下面这样调用新操作。

    @using WebShops
    @model ICollection<WebShops.Shop>
    @foreach (Shop shop in Model)
    {
            @Html.Label(shop.name)
            @Html.Display(shop.name)
            <br />
            @Html.Label(shop.image)
            @Html.Display(shop.image)
            <hr />
            @Html.ActionLink("Display", "Shop","ControllerName", new {id = shop.id})
    }   
    

    【讨论】:

      【解决方案2】:

      您可以使用来自this overload of Html.ActionLinkobject routeValues 来做到这一点:

      @Html.ActionLink("DetailsPage","Shops", new { id = shop.ID })
      

      这不会“将模型发送到新页面”,它会链接到Shops/DetailsPage/4,单击时会导致 GET 请求。

      因此,在DetailsPage 操作方法中,您必须再次在 ID 上查找商店才能显示它。

      【讨论】:

      猜你喜欢
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-31
      • 2018-05-24
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多