Asp.net mvc 3 如何在ASP.NET MVC 3(Razor)中将值从视图传递到控制器?

Asp.net mvc 3 如何在ASP.NET MVC 3(Razor)中将值从视图传递到控制器?,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,我在数据库中有这个表: 我通过此代码视图显示“音乐”中的所有值,无需重复: @foreach (var item in Model.Select(m => m.music).Distinct()) { <tr> <td> @Html.ActionLink(item, "Deep", ViewData["item"]) </td> </tr> } 我想当我按下“Jazz”

我在数据库中有这个表:

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

@foreach (var item in Model.Select(m => m.music).Distinct())
{
    <tr>
        <td>
            @Html.ActionLink(item, "Deep", ViewData["item"])
        </td>
    </tr>
}
我想当我按下“Jazz”时,结果是“Miles”,“Kirk”等等。 怎么做? 我想我可以将值从视图传递给控制器,但我不知道在我的情况下如何传递。 请帮帮我

控制器中的操作示例:

    public ActionResult Deep(string music)
    {

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

你的Actionlink并不是你想要的。如果你将鼠标悬停在生成的链接上,我想每个链接都会命名为不同的控制器

相反,看看这个版本

控制器的动作如下

public ActionResult Deep(int id)
{
  //Do something
}

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

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

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

@Html.ActionLinkitem,Deep,新建{idItem=item.IdMusic,foo=bar}

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

需要注意的一点是,客户机/用户正在向web服务器发出请求,他无法像您尝试的那样发送对象。而是发送对象的唯一标识符idMusic,并根据请求从数据库/cache/session检索它

希望这有帮助,
Zlatibor也不清楚viewdata中的内容您可能需要新的{id=item}和控制器Deepstring idI中的字符串类型,就像您所说的那样,但我仍然有错误;在视图中:@Html.ActionLinkitem,Deep,Home,new{id=item}。我做错了什么?所以。。。控制器中有什么错误。编译还是运行时?如果运行时,id etc的值是多少。运行时:CS0234:命名空间“TEST_MVC.Models”中不存在类型或命名空间名称“table”的名称,缺少程序集引用?因此,您在哪里引用tableThanx,但我无法使用您的示例=
@Html.ActionLink(item, "Deep", "YourController", new {id= ViewData["item"]})
public ActionResult Deep(int id)
{
  //Do something
}