我正在检查是否有人为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>
我希望将用户重定向到可能包含大量数据的各个页面。不仅从页面到页面,而且从电子邮件到页面也是如此。这将是高度可重用的,我认为会清理很多代码,并且如果它已经在那里漂浮,将节省大量时间来编写它。我不喜欢重新制作轮子。
答案 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>
)
<%} %>