在MVC中创建超链接(锚标记)以将数据发布到控制器

时间:2013-01-19 20:10:44

标签: asp.net-mvc asp.net-mvc-4

我有一个相当简单的场景

我的控制器中有一个带有类似

语法的动作方法
[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

我该如何解决这个问题?

由于

3 个答案:

答案 0 :(得分:2)

我猜你有两个选择......

  1. 删除[HttpPost]属性(我认为首选)
  2. 使用jquery发布:$ .post()
  3. 以下是如何进行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>