我需要将一些ASP LinkButtons实例化到ASP.NET MVC视图页面上。我尝试了一些东西,但我不能让它们出来。这是我最近的代码化身: aspx文件
<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中呈现的是我正在枚举的集合中每个成员的文本链接的一个实例,但它们不是超链接,只是文本。 生成的HTML看起来像这样
<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实际上是链接的?
答案 0 :(得分:15)
我的猜测是你想使用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();
});
});
答案 1 :(得分:7)
使用ASP.NET MVC,您应该使用Html.ActionLink(...)
辅助方法(等等)。它们提供比LinkButtons更丰富的功能。
答案 2 :(得分:2)
不幸的是,ASP.NET MVC目前不支持Web窗体控件。抱歉! :(
您必须使用标准的HTML链接。
答案 3 :(得分: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")