Javascript 使用@Html.ActionLink-ASP.NET MVC 5发布文本区
我知道这个问题被回答了很多次,但因为我对javascript不太了解,而且这是我的第一个网站,所以我在链接中遵循了答案。这是我目前的代码:Javascript 使用@Html.ActionLink-ASP.NET MVC 5发布文本区,javascript,jquery,asp.net-mvc-5,Javascript,Jquery,Asp.net Mvc 5,我知道这个问题被回答了很多次,但因为我对javascript不太了解,而且这是我的第一个网站,所以我在链接中遵循了答案。这是我目前的代码: <li>@Html.ActionLink("Save","SaveClass",new { path2=Model.path,code="xxx"},new { id="save"})</li> @Html.TextAreaFor(m=>m.
<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>
代码始终将“xxx”保存到文件中,并抛出:
请求的内容似乎是脚本,不会由
静态文件处理程序
如何使其工作?
ActionLink
helper生成一个链接并单击该链接将发出get请求。看起来您正试图通过querystring将文本区域的值发送到下一个操作方法。但是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();
});
})
确保使用正确的参数名称(与输入名称匹配)
使用表单而不是ActionLink。这不是链接的目的。所谓表单,是指@Html.BeginForm()?我以前用过它,它工作得很好,但它使用按钮,而这里我需要链接。是的。如果有人愚蠢到需要这样做,你可以让一个按钮看起来像一个CSS链接。从技术上讲,你不需要这里的链接,一个按钮也可以做同样的工作——它们都是向服务器发出新请求的方式。谢谢!它现在可以工作了。它仍然抛出
请求的内容似乎是脚本,静态文件处理程序将不会为其提供异常。但是它正确地存储了输入!您何时何地收到此消息?当我单击“保存”时,我收到此消息。但在重新加载页面后,我发现它正确地存储了值。在重定向到索引操作时(保存后,您正在重定向到索引)是否出现该错误。在这种情况下,索引页将出现问题。当您在浏览器中直接访问该操作时,您应该能够看到相同的消息。当我直接访问“索引”操作时,我看不到该消息,但是,是的,当我从“存储类”或任何其他视图重定向时,我似乎看到了该消息。
$(function(){
$("#save").click(function(e){
e.preventDefault();
$(this).closest("form").submit();
});
})
public ActionResult SaveClass(string path,string code)
{
// to do : return something
}