【问题标题】:Create hyperlink (anchor tag) in MVC to post data to controller在 MVC 中创建超链接(锚标记)以将数据发布到控制器
【发布时间】:2013-01-19 20:10:44
【问题描述】:

我有一个相当简单的场景

我的控制器中有一个动作方法,语法类似

[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

我应该如何解决这个问题?

谢谢

【问题讨论】:

  • 我不明白你到底想改变什么?
  • @mattytommo 已创建的链接在查询字符串中传递参数,但我想发布数据
  • 无法从操作链接发帖。如果你想发帖,你需要一个提交按钮,然后你可以设置它看起来像一个链接。

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


【解决方案1】:

我猜测您使用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. 删除[HttpPost] 属性(我认为是首选)
    2. 使用jquery 发帖:$.post()

    这里是如何做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)
            });
        });
    });
    

    【讨论】:

      【解决方案3】:

      您也可以使用按钮:
      例如在 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-09
        • 1970-01-01
        • 2014-04-21
        相关资源
        最近更新 更多