【问题标题】:Passing form data from jqueryUI dialog to controller with ASP.NET MVC3使用 ASP.NET MVC3 将表单数据从 jqueryUI 对话框传递到控制器
【发布时间】:2012-07-25 23:52:09
【问题描述】:

我是 ASP.NET MVC 的新手;我遇到的问题是从 jqueryUI 对话框表单中获取数据并将其传递给控制器​​,这样我就可以将表单输入保存到数据库中。

由于某种原因,我的控制器中处理此问题的方法没有被调用,尽管它似乎在 jquery 代码中被正确引用。这是我在视图中的内容(我显然省略了大部分代码,只是将相关部分放在这里以方便阅读):

<a href="#" id="dialog_link">Open Dialog Box</a>



<div id="dialog" title="MakeSomeSampleNote">
    <form id="testform" method="post">
        <input id="tbx_casenote" name="tbx_casenote" type="text" style="height:50px; width:200px;" />
    </form>
</div>


$("#dialog").dialog({
    autoOpen: false,
    resizable: true,
    height: 210,
    width: 510,
    modal: true,
    buttons: {
        "Ok": function () {
             var noteval = $("#tbx-casenote").val();
             $.ajax({
             type: "POST",
             url: "@Url.Action("NoteController/SaveNote")",
             data: { content: tbx_casenote_val },
             cache: false,
             dataType: "json",
             success: function (data) {
                     $("#dialog").dialog("close");
                     }
             });
             },
             "Cancel": function () {
                    $(this).dialog("close");
             }}
      });





$('dialog_link').click(function () { 
      $('#dialog').dialog('open');
      return false;
 });

这是我在控制器中使用的方法;调试时,在我测试对话框表单并单击“确定”按钮后,此方法永远不会被命中:

 [HttpPost]
 public JsonResult SaveNote(string NoteText)
 {
      //code to save this note to database - not relevant to question
      return Json(new { success = true });

 }

谢谢。

【问题讨论】:

  • 既然你设置了autoOpen: false,你在哪里打开/显示对话框?此外,您似乎在 AJAX 调用中使用了一些 tbx_casenote javascript 变量,不清楚在哪里定义。
  • 编辑了我原来的帖子来回答你的问题。谢谢
  • 好的,我对代码进行了一些更改,并更新了我的帖子以反映这一点。不再出现“堆栈空间不足”错误。现在只是似乎什么都没有发生;控制器中的 SaveNote 方法永远不会从 jquery 调用,这就是它现在所在的位置。

标签: jquery asp.net-mvc jquery-ui-dialog


【解决方案1】:

在我看来,您的 @Url.Action 是错误的。你试过@Url.Action("SaveNote", "Note")吗?

只是为了让这个完整的答案,问题是“控制器”这个词不应该出现在 Url.Action 调用中。以下每一项都可以工作:

@Url.Action("SaveNote", "Note")

...或

@Url.Action("Note/SaveNote")

【讨论】:

  • 将其更改为 Note(而不是 NoteController)修复了它。现在工作正常。谢谢!我真的对此感到沮丧。不知何故,我知道我只是在做一些愚蠢的事情,这将是一个简单的解决方案。
  • 正确。 “控制器”后缀是 ASP.NET MVC 中的约定。您应该只通过“注释”部分引用控制器。
【解决方案2】:

您可以将 url 设为“控件名/方法名”

【讨论】:

  • 我不知道。即便如此,应该是“NoteController/SaveNote”吗?还是只是“Note/SaveNote”?我怀疑控制器被命名为 NoteControllerController。
  • 如果您的控制器名称是“LoadController”,您只需要加载,我将这种技术与 asp.net url:"pagename.aspx/methodname" 一起使用,但在页面中的方法上使用属性 [webmethod]
猜你喜欢
  • 2017-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
相关资源
最近更新 更多