ASP.NET MVC中的LinkButton

9

我需要在ASP.NET MVC视图页面上实例化一些ASP LinkButtons。我尝试了几种方法,但是我无法得到正确的结果。以下是代码的最新版本: the aspx file

<body>
<% using (Html.BeginForm("TitleDetail", "Movies", FormMethod.Post, new{runat="server"})) { %> 

    <ul>
    <% foreach (var disc in Model.Title.tblDiscs) %>
    <% { %>

        <li>
            <asp:LinkButton ID="Play">Link</asp:LinkButton>
        </li>
    <% } %>
    </ul>
<% } %> 
</body>

在Firefox中呈现的是我正在枚举的集合中每个成员的文本链接实例,但它们不是超链接,只是文本。

<form action="/MyMovies/TitleDetail/239" method="post" runat="server">test title <br />

   <ul>
        <li>

            <asp:LinkButton ID="Play">Link</asp:LinkButton>
        </li>

        <li>
            <asp:LinkButton ID="Play">Link</asp:LinkButton>
        </li>

        <li>
            <asp:LinkButton ID="Play">Link</asp:LinkButton>

        </li>

    </ul>

我尝试给每个 asp:LinkButton 标签添加 runat="server" 属性,但是我收到一个运行时异常,提示控件只能放在具有 runat="server" 属性的表单标记内。 我认为我已经这样做了,所以我真的不明白。 有人能解释一下我做错了什么,以及我需要做什么来修复它,使 LinkButtons 实际上成为链接吗?

4个回答

14

我猜想你希望使用LinkButton来提交表单,对吗?如果是这样的话,我曾经做过类似的事情,大致像这样:

<% using (Html.BeginForm("TitleDetail", "Movies", 
    FormMethod.Post, new{ id = "MyForm", name = "MyForm" })) { %>     
<ul>
    <% foreach (var disc in Model.Title.tblDiscs) { %>
        <li>
            <a class="do-something-link" href="javascript:void(0);">Click</a> 
        </li>
    <% } %>
</ul>
<% } %>

然后通过 jQuery 处理提交:

$(document).ready(function(){
    $("a.do-something-link").click(function(ev) {
        ev.preventDefault();
        $("#MyForm").submit();
    });
}); 

7

在ASP.NET MVC中,你应该使用Html.ActionLink(...)这样的辅助方法(等等)。它们提供比LinkButtons更丰富的功能。


2

我写了一个有点粗糙的扩展方法。如果您愿意,可以对此进行改进(这是我所需要的全部内容):

public static IHtmlString ActionButton(this UrlHelper urlHelper, string buttonText,
    string actionName)
{
    var html = string.Format("<input type=\"button\" value=\"{0}\" " +
        "onclick=\"window.location = '{1}'\"/>",
        buttonText, urlHelper.Action(actionName));

    return new HtmlString(html);
}

在视图中,可以这样调用:

@Url.ActionButton("Button Text", "ActionMethod")

2

很遗憾,ASP.NET MVC目前不支持Web表单控件。对不起!:(

您必须使用标准的HTML链接。


12
我觉得这实际上是一件好事(商标)。 :) - BobbyShaftoe
1
@BobbyShaftoe,好事情基于什么?通常任何改变服务器状态的东西应该使用POST动词,GET应该只用于检索数据(这是W3C的建议,旨在提高安全性)。出于美观原因,不总是可能使用按钮,因此需要LinkButton。 - Waleed Eissa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接