【问题标题】:How to pass values from view to controller in ASP.NET MVC 3 (Razor)?如何在 ASP.NET MVC 3 (Razor) 中将值从视图传递到控制器?
【发布时间】:2012-04-29 18:34:52
【问题描述】:

我在数据库中有这张表:

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);
    }

【问题讨论】:

    标签: asp.net-mvc-3 razor


    【解决方案1】:

    您的 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
    }
    

    【讨论】:

    • 它也不清楚你的视图数据中有什么你可能需要新的 {id=item} 和控制器 Deep(string id) 中的字符串类型
    • 我按照你说的做,但我还是有错误。在控制器中:var res = (from m in d.table where m.music == id select m);在视图中:@Html.ActionLink(item, "Deep", "Home", new {id= item})。我做错了什么??
    • 那么……控制器出现什么错误。编译还是运行时?如果是运行时,id 等的值是多少。
    • 运行时:CS0234:名称空间“TEST_MVC.Models”中不存在类型或名称空间名称“table”的名称(缺少程序集引用?)
    • 那么你指的是哪里的“桌子”
    【解决方案2】:

    无法将值从视图直接传递到控制器。当用户向 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) 并根据数据库/缓存/会话的请求检索它。

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

    【讨论】:

    • 谢谢,但我不能用你的例子 =(((
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 2014-06-29
    • 1970-01-01
    相关资源
    最近更新 更多