0

我在数据库中有这个表:

http://i.stack.imgur.com/C7CWX.png

我通过此代码(视图)显示“音乐”中的所有价值,而无需重复:

@foreach (var item in Model.Select(m => m.music).Distinct())
{
    <tr>
        <td>
            @Html.ActionLink(item, "Deep", ViewData["item"])
        </td>
    </tr>
}

结果:

Jazz
Disko
Rock
Metal

我想当我按下“Jazz”时,结果是“Miles”、“Kirk”等。怎么办?我想我可以将值从 View 传递给 Controller,但我不知道在我的情况下如何做。请帮我

控制器中的操作(例如):

    public ActionResult Deep(string music)
    {

        var res = (from m in d.table where m.music == music select m);
        return View(res);
    }
4

2 回答 2

0

无法将值从视图直接传递到控制器。当用户向 Web 服务器询问您的初始页面时,Web 服务器 (ASP.NET) 会计算出要调用的操作。该操作收集数据并将该数据(使用视图模型、ViewBag、ViewData 或 TempData)发送到视图以进行渲染。在这种情况下,渲染是将您的数据转换为 HTML(可以是任何真正的 CSS、JavaScript ......将其视为字节数组)发送到将其解释为网页的客户端(浏览器)的过程。用户看到你的链接,当他点击它时,他会向网络服务器发出新的请求,这个过程会重复。

您正在为以下链接创建代码:@Html.ActionLink(item, "Deep", ViewData["item"])

第一个参数项是链接文本。“Deep”是在当前控制器上调用的动作名称。第三个参数是对象类型。第三个参数应该与 Deep 操作中的参数类型相同,并且您应该使用下一个表示法来传递数据

@Html.ActionLink(item, "Deep", new { idItem = item.IdMusic, foo = "bar" })

在前面的示例中,ASP MVC 期望您的“深度”操作具有参数 idItem 和 foo。

需要注意的一件事是客户端/用户正在向 Web 服务器发出请求,他无法像您尝试的那样发送对象。相反,您发送对象的唯一标识符(idMusic)并根据数据库/缓存/会话的请求检索它。

希望这会有所帮助,兹拉蒂博尔

于 2012-04-29T18:51:43.757 回答
0

您的 Actionlink 并没有完全按照您的意愿行事。如果您将鼠标悬停在生成的链接上,我认为每个链接都会命名一个不同的控制器!

http://msdn.microsoft.com/en-us/library/dd505070.aspx

而是看这个版本

http://msdn.microsoft.com/en-us/library/dd493066.aspx

@Html.ActionLink(item, "Deep", "YourController", new {id= ViewData["item"]})

和一个控制器动作,比如

public ActionResult Deep(int id)
{
  //Do something
}
于 2012-04-29T18:40:16.263 回答