带有帖子功能的MVC Html.ActionLink?

时间:2011-12-13 20:26:19

标签: c# asp.net-mvc asp.net-mvc-3 model-view-controller

我正在检查是否有人为Html.ActionLink编写了一个MVC扩展,你可以传入这样的Post参数:

<% Html.ActionLink("Click me", "Index", "Home", new { MyRouteValue = "123" }, null, new { postParam1 = "a", postParam2 = "b" }); %>

这会像正常一样呈现链接,但是有一个onClick事件,它提交了一个带有Action,控制器和路由值的Action url的渲染表单,以及Post Parameters中的其他隐藏输入,如下所示:

<a href="#" onClick="$('#theform').submit(); return false;">Click me</a>
<form id="theform" action="/Home/Index/123" method="post">
   <input type="hidden" name="postParam1" value="a">
   <input type="hidden" name="postParam2" value="b">
</form>

我希望将用户重定向到可能包含大量数据的各个页面。不仅从页面到页面,而且从电子邮件到页面也是如此。这将是高度可重用的,我认为会清理很多代码,并且如果它已经在那里漂浮,将节省大量时间来编写它。我不喜欢重新制作轮子。

3 个答案:

答案 0 :(得分:2)

ActionLink仅用于创建<a>。如果它已经在表单内,你要求的东西会爆炸。如果不是那么最好将链接作为表单内的提交按钮,而不是使用javascript(javascript和电子邮件不相处很好)。

您可以创建表单并将其附加到DOM的末尾。这可以通过部分视图或通过javascript来完成。

老实说,我建议你不要使用POST。如果您保留大部分数据并且只需要检索所述数据所需的ID,那么您就不应该在actionlink中传递太多数据。

答案 1 :(得分:1)

Ajax.ActionLink完全适合发布请求。要刷新页面,您可以创建一个刷新页面的功能(例如function reload(){ windows.location.reload();})。 它看起来像这样。

@Ajax.ActionLink("DiaplyName", "Action", new { parameters to post }, new AjaxOptions { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, OnComplete="reload();"})

注意:您需要引用相应的脚本以使用ajax或jQuery代码。

答案 2 :(得分:0)

这段代码对我有帮助并且节省了我的一天..我改进了它并且它帮助了我模仿用户..这里是吼叫,我做了...

  <% if (Session["SessionUserImpersonate"] != null && Session["SessionUserImpersonate"] != "" && Session["SessionUserImpersonate"] == "Yes")
    {
        BLL.Models.User userold = new BLL.Models.User();
        userold = (BLL.Models.User)Session["SessionUserOld"];      
        %>
    <span class="FL">(Impersonated as <%=Website.Backoffice.SessionHelper.Session_User.UserName != null ? Website.Backoffice.SessionHelper.Session_User.UserName:"" %>  , </span>

    <form class="FL" id='frmid' action="/Index/Login?username=<%=userold.UserName%>&password=<%=userold.Password%>&IsImpersonate=No"  method="post">
                <a class="TxtRed" style="cursor:pointer;" onclick="$('#frmid').submit(); return false;" > - finish impersonated session  </a>
                </form>   
                ) &nbsp;&nbsp;
    <%} %>