【问题标题】:@Ajax.ActionLink - passing value of text-area to controller, and a data-something attribute@Ajax.ActionLink - 将文本区域的值传递给控制器​​,以及一个 data-something 属性
【发布时间】:2018-01-01 20:55:05
【问题描述】:

故事是这样的:

我正在制作一个评论系统,当用户想要添加评论时,他们需要将数据放在文本区域中。我想获取用户输入的值并创建一个@Ajax 链接,将其作为参数发送到控制器。

我正在使用 ASP.NET MVC5,在我的 View() 中我有以下内容:

<textarea class="textArea" rows="3"></textarea>
        <br />
        @Ajax.ActionLink("Send",
                         "AddComment",
                         new { parametar = 0 , Contents = GetText() },
                         new AjaxOptions
                         {
                            UpdateTargetId = "beforeThis",
                            InsertionMode = InsertionMode.InsertBefore,
                            HttpMethod = "GET"
                         },
                         new { @class = "postavi btn btn-primary" })

我尝试在下面插入以下内容:

<script type="text/javascript">
    function GetText() {
        return "hello there!";
    }
</script>

我说错了:

名称GetText在当前上下文中不存在 (这是在@Ajax.ActionLink 的参数中)

似乎我无法集成 javascript(它可以为我获取此值和剃须刀代码)我该如何解决? PS> 我已经四处寻找这个,要么是更早版本的 MVC 的答案,要么在我尝试相同的时候答案没有奏效。

【问题讨论】:

  • 您的操作链接是 GET 并且您永远不应该使用 GET 来修改数据 - 它必须是 POST,更不用说如果输入的文本很大,您将超过查询字符串限制并抛出异常。使用表单并将值提交给 POST 方法。

标签: ajax asp.net-mvc asp.net-mvc-5


【解决方案1】:

确保导入此命名空间:

using System.Web.Mvc.Ajax

【讨论】:

  • 在哪里导入这个?我该怎么问? (只是使用)
  • 尝试在控制器中添加这个@EdwardSnowden
  • 做了,没有变化。
【解决方案2】:

您可以将事件处理程序添加到 ajax 链接以更新自定义路由值。

@Ajax.ActionLink("Click", "Send", new {id = "xxx"}, new AjaxOptions(){}, new { onclick = "addParameter(this)" })

function addParameter(e) {
        e.href = e.href.replace("xxx", "HelloWord");
    }

【讨论】:

    【解决方案3】:

    您现在所做的是希望剃须刀调用您的 JavaScript 代码,这是不可能的。这是因为视图将在被发送到客户端之前由 Razor 呈现为 HTML,并且 Razor 不知道 JavaScript 代码,它只知道 C#。所有 JavaScript 代码都在浏览器上运行。

    我建议您使用 POST 方法发送您的 cmets。 您可以使用此代码发送它们:

    @using (Ajax.BeginForm("AddComment", new { parametar = 0 }, new AjaxOptions()
    {
        UpdateTargetId = "beforeThis",
        InsertionMode = InsertionMode.InsertBefore,
        HttpMethod = "POST",
        Url = Url.Action("AddComment")
    }))
    {
        @Html.TextArea("Contents")
        <input type="submit" value="Send" class="postavi btn btn-primary" />
    }
    

    【讨论】:

      猜你喜欢
      • 2016-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多