使用@ Html.ActionLink发布textarea - ASP.NET MVC 5

时间:2017-03-26 20:48:41

标签: javascript jquery asp.net-mvc-5

我知道这个问题已被多次回答,但由于我对javascript知之甚少,这是我的第一个网站,我在this链接中听到了答案。到目前为止,这是我的代码:

    <li>@Html.ActionLink("Save","SaveClass",new { path2=Model.path,code="xxx"},new { id="save"})</li>
@Html.TextAreaFor(m=>m.code, new { id = "code" })
<script>
       $("#save").click(function(evt) {
           var fakedUri = $("#save").attr("href");
           alert($('#code').val());
           var uri = $("#save").attr("href").replace("xxx", $("#code").val());
});
    </script>

这是我的控制者:

public ActionResult SaveClass(string path2,string code)
    {
        modelSC.path = path2;
        modelSC.code = code;
        System.IO.File.WriteAllText(Server.MapPath(modelSC.path), code);
        return RedirectToAction("Index");
    }

代码始终将'xxx'保存到文件中,然后抛出:

  

请求的内容似乎是脚本,不会提供   静态文件处理程序。

我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:0)

ActionLink帮助程序生成一个链接并单击它将发出GET请求。看起来您正在尝试通过查询字符串将文本区域的值发送到下一个操作方法。但GET可能不是解决这个问题的最佳解决方案。 Querystring对可处理的数据量有限制(因浏览器而异)。

理想情况下,您应该进行表单提交,如果您不喜欢按钮,但想要一个链接来启动表单提交,则可以使用一点点javascript。

@using(Html.BeginForm("SaveClass","YourControllerName"))
{
  @Html.TextAreaFor(m=>m.code)
  @Html.HiddenFor(s=>s.path)
  @Html.ActionLink("Save","SaveClass","YourControllerName",null,new { id="save"})

}

现在在您的javascript中,单击链接时,停止默认行为(默认GET操作),然后提交单击链接所在的表单。我们可以使用closest()方法。

$(function(){

  $("#save").click(function(e){
    e.preventDefault();
    $(this).closest("form").submit();
  });

})

确保使用正确的参数名称(与输入名称匹配)

public ActionResult SaveClass(string path,string code)
{
   // to do  : return something
}