当前位置: 首页 > 面试题库 >

如何在MVC中使用JQUERY AJAX将视图模型发布到操作方法

马德厚
2023-03-14
问题内容

我想使用$ .POST或$ .AJAX实现创建(插入)屏幕。

注意:代码无需AJAX调用即可正常工作..它已经存在..现在我需要进行ajax调用并保存而无需回发。我写了下面的代码:

在提交点击事件时,代码如下:

$.ajax(
      {
          url: '@Url.Action("CreateProduct","ProductManagement")',
          dataType: 'json',
          contentType: 'application/json; charset=utf-8',
          type: 'post',
          data:   $('frm').serialize(),
          success: function () { alert('s'); },
          error: function (e1, e2, e3) { alert(e2); alert(e1 + ' ' + e2 + ' ' + e3); alert('failure event'); }
      }
    );
});

在服务器端:

[HttpPost]
public JsonResult CreateProduct(FormCollection frm)
{
    manager.ProductManager m = new manager.ProductManager();
    // m.InsertProduct(new common.DTO.ProductDTO() { Id = id, ProductName = ProductName, Description = Description, Cost = cost, ProductTypeId = 5 });
    return Json("'result':'success'", JsonRequestBehavior.AllowGet);
}

问题是,每次它都会调用操作,但在frm参数param 上找不到数据。我也试图保持-视图模型ProductViewModel vm作为参数,但是它没有用..只是给了我null值。同样,在ajax调用中,它成功但是。唯一的问题是控制器的动作上没有任何内容。

HTML如下:

  @using (Html.BeginForm("CreateProduct", "ProductManagement", FormMethod.Post, new { id = "frm" }))
    {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)

<fieldset>
    <legend>ProductViewModel</legend>
    <div id="CreateDiv">
        <div class="editor-label">
            @Html.LabelFor(model => model.ProductName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.ProductName)
            @Html.ValidationMessageFor(model => model.ProductName)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Cost)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Cost)
            @Html.ValidationMessageFor(model => model.Cost)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Description)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Description)
            @Html.ValidationMessageFor(model => model.Description)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.ProductTypeId)
        </div>
        <div class="editor-field">
            @Html.DropDownList("ProductTypeId", "Choose item")
            @Html.ValidationMessageFor(model => model.ProductTypeId)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.ProductTypeName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.ProductTypeName)
            @Html.ValidationMessageFor(model => model.ProductTypeName)
        </div>
    </div>
    <p>
        <input type="submit" value="Create" id="btnSubmit" />
    </p>

</fieldset>
 }

 <div>
 @Html.ActionLink("Back to List", "Index")
 </div>

请指导我这里出了什么问题。

谢谢


问题答案:

对于ID选择器,您必须使用带有ID的“#”。

这将起作用:

$.ajax(
  {
      url: '@Url.Action("CreateProduct","ProductManagement")',
      dataType: 'json',
      contentType: 'application/json; charset=utf-8',
      type: 'post',
      data:   $('this').serialize(), OR  $('#frm').serialize(),   <-----------------
      success: function () { alert('s'); },
      error: function (e1, e2, e3) { alert(e2); alert(e1 + ' ' + e2 + ' ' + e3); alert('failure event'); }
  }
 );

或者尝试一下:

var form = $('#frm');
$.ajax({
 cache: false,
 async: true,
 dataType: 'json',
 contentType: 'application/json; charset=utf-8',
 type: "POST",
 url: form.attr('action'),
 data: form.serialize(),
 success: function (data) {
 alert(data);
   }
 });


 类似资料:
  • 问题内容: 我正在尝试使用以下方法将使用jQuery Ajax的数据发布到MVC动作。但是在控制器内部,所有模型属性始终都是。不知道我在这里想念的是什么。 .CSHTML 的JavaScript 控制者 模型 EDIT1 我已经添加了上面的模型。单击保存后,此处显示序列化数据和JSON 数据。 序列化数据 后 我尝试添加属性和没有运气的属性。 我认为不必将返回类型从更改为。 该URL也是正确的,因

  • 问题内容: 我试图实现对包含复杂对象作为参数的控制器操作方法的JQueryAJAX调用。我读了很多博客,并尝试了从中学习到的几种技巧。 我想触发一个异步发布,当用户在某个字段上制表符时调用该异步发布(不是表单保存发布–如我发现的其他示例所示)。 我的意图是: 在客户端上实例化一个对象(不是为View提供类型的ViewModel); 使用视图中多个字段中的数据填充对象; 将此对象转换为JSON; 使

  • 问题内容: 我一直在这里看问题:将MVCajaxjson发布到控制器操作方法,但不幸的是,它似乎并没有帮助我。我的几乎完全相同,除了我的方法签名(但是我已经尝试过了,但仍然没有被击中)。 jQuery的 控制者 但是,无论我尝试什么,我都不会受到打击。通过调试,我知道它发送了一个请求,每次都会得到一个错误。 问题答案: 您的操作需要字符串参数,但是您要发送一个复合对象。 您需要创建一个与您要发送的

  • 问题内容: 我是Java开发人员,刚接触.NET。我正在一个.NET MVC2项目中,我想要一个局部视图来包装小部件。每个JavaScript小部件对象都有一个将由模型数据填充的JSON数据对象。然后,当在窗口小部件中更改数据或在另一个窗口小部件中更改数据时,用于更新此数据的方法将与事件绑定。 代码是这样的: : : 我不知道如何发送数据,然后能够使用它来填充小部件以及将其转换为JSON。我已经在

  • 我正在研究一种生成pdf的方法。为此,我使用tuespechkin库。转换本身就相当快。大部分时间需要从数据库中检索数据并创建pdf的html表示。为了提高性能,我尝试使用异步方法和PLinq,但它没有多大帮助。有没有办法优化这个方法? 代码中最昂贵的部分(更新):

  • 问题内容: 我正在构建一个php应用程序,该应用程序需要将用户上传的图片直接发布到Instagram,但是在快速搜索后,我发现API中没有这样的功能:(感觉很奇怪…因为他们应该提供一个。我我不确定是否有其他方法(适用于Android和iOS的应用除外)使用php上传图片。如果有可能,请给我提出任何想法。 谢谢 问题答案: 如果您阅读了共享的链接,则可接受的答案是: 您无法通过API将图片发布到In