我有一个相当简单的场景
我的控制器中有一个带有类似
语法的动作方法[HttpPost]
public ActionResult Consignment(string txtConsNo, string isReferenceTracking)
{}
不在页面中我需要在应用程序中创建需要访问此操作方法的超链接。我正在使用HTML.ActionLink方法创建像这样的超链接
@Html.ActionLink((string)item.RDC_CONSNO, "Consignment", "Tracking", new { txtConsNo = (string)item.RDC_CONSNO, rdbConsNo = "" }, null)
但它会创建像这样的链接
http://localhost:3412/Tracking/Consignment?txtConsNo=100245506
我该如何解决这个问题?
由于
答案 0 :(得分:2)
我猜你有两个选择......
[HttpPost]
属性(我认为首选) 以下是如何进行jquery方法(如有必要)
Html:
<a href="#" class="postToConsignment"
data-consno="@item.RDC_CONSNO">@item.RDC_CONSNO.ToString()</a>
javascript(需要在您的视图中):
$(function(){
$('.postToConsignment').on('click', function(e){
// Stop links normal behaviour
e.preventDefault();
//Get the url to post to
var url = '@Url.Action("Consignment", "Controller")';
//Get consNo
var consNo = $(this.data('consno');
$.post(url, new { txtConsNo: consNo}, function(data) {
//Deal with the result (i.e. the data param)
});
});
});
答案 1 :(得分:2)
我猜你使用item
代替你在循环中渲染链接的模型?在任何情况下,我建议添加一个表格并将链接发布;链接将是这样的:
@Html.ActionLink(
(string)item.RDC_CONSNO,
"Consignment",
"Tracking",
new { @class = "consignmentLink" });
...然后在循环之后(如果有的话)你输入一个表单和一些连线JavaScript,如下所示:
@using (Html.BeginForm("Consignment", "Tracking"))
{
@:<input type="hidden" id="txtConsNo" name="txtConsNo" />
}
$("a.consignmentLink").click(function(e) {
e.preventDefault();
var $consignmentNumberInput = $("#txtConsNo");
$consignmentNumberInput.val($(this).text());
$consignmentNumberInput[0].form.submit();
});
要填充操作的isReferenceTracking
参数,您可以添加另一个隐藏字段,并将该值作为每个链接上的数据属性。
答案 2 :(得分:1)
您也可以使用按钮:
例如在 asp核心语法:
//some other tags
<form method="post">
<input asp-for="YourModelPropertyOrYourMethodInputName"
value="@TheValue" type="hidden" />
<button type="submit" class="link-button" formaction="/TheDestinationController/TheDestinationActionMethod">
@(TextValue)
</button>
</form>