MVC - 通过ajax调用返回数据将其呈现为页面

时间:2017-09-28 08:27:34

标签: json ajax asp.net-mvc

MVC新手。

情景是。使用第三方上传库获取图像。提交表单时,我想通过ajax进行调用以提交数据并返回插入的项目ID。然后,我将该ID用于第三方上传库,以构建将图像上传到的文件夹。

我有ajax调用工作并将数据插入数据库并获取插入的id。但是当调试从控制器返回时,它会将id作为整个页面呈现。

我认为在MVC中缺少一些基本的东西。

cshtml文件:

<div class="col-md-8">
              <input type="submit" value="Add Item" id="submitItem" />
              <script>
                $(document).ready(function () {
                  $("#submitItem").submit(function () {
                    event.preventDefault();

                    insertData();
                  });
                });

                function insertData()
                {
                  var requestData = {
                    userID: $("#hdnUserID").val(),
                    title: $("#title").val(),
                    typeID: $("#typeID").val(),
                    description: $("#description").val()
                  };

                  $.ajax({
                    url: '<%= Url.Action("ItemUserDashBoard", "Home") %>',
                    type: 'post',
                    data: JSON.stringify(requestData),
                    dataType: 'json',
                    success: function (data) {
                      // your data could be a View or Json or what ever you returned in your action method 
                      // parse your data here
                      alert(data);
                      $("#fine-uploader-gallery").fineUploader("uploadStoredFiles");
                    },
                    processData: false
                  });
                }
              </script>
            </div>

HomeController.cs

[HttpPost]
    public JsonResult ItemUserDashBoard(ItemAppraise.Models.iaDashBoardModel objItemUserDashBoard)
    {
      if(ModelState.IsValid)
      {
        using (dbContext)
        {
          ia_items iaItem = new ia_items
          {
            userID = objItemUserDashBoard.iaItems.userID,
            typeID = objItemUserDashBoard.iaItems.typeID,
            title = objItemUserDashBoard.iaItems.title,
            description = objItemUserDashBoard.iaItems.description,
            lastUpdate = DateTime.Now
          };

          dbContext.ia_items.Add(iaItem);
          dbContext.SaveChanges();

          //objItemUserDashBoard.iaItems.itemID = iaItem.itemID;
          return Json(iaItem.itemID.ToString());
        }
      }
      else{
        return null;
      }
    }

Fiddler将其显示为具有Content-Type标题:application / json;字符集= UTF-8。

但页面会在控件网址“http://localhost:55689/Home/ItemUserDashBoard”下呈现,只显示商品ID。

如何将数据恢复为仅用于ajax调用的成功部分而不进行渲染?是部分观点还是类似的东西?

感谢任何指导。

1 个答案:

答案 0 :(得分:1)

在标准MVC中。对控制器的任何调用都像Web请求一样处理。所以,如果我理解正确 - 你的httpPost的结果是渲染而不是所需的视图?这是因为您正在返回JSON,因此控制器假定您正在尝试渲染。如果您想要呈现视图(并以某种方式使用该响应数据),您可以尝试将返回类型设置为ActionResult并返回View("nameofview");您可以将响应数据传递给2017-09-28 16:05:26.452999+0900 MiFollowers WatchKit Extension[4628:4012814] [bg_app_refresh] -[WKRefreshBackgroundTask cleanupStorage]_block_invoke:213: Error attempting to reach file:///Users/ryuuzaki/Library/Developer/CoreSimulator/Devices/2E4D6389-93B7-4542-B07F-9A02C720B9AF/data/Containers/Data/PluginKitPlugin/FA4415DF-D984-4394-80B9-EDA199AB587E/Library/com.apple.watchkit/bktaskapp_(null): Error Domain=NSCocoaErrorDomain Code=260 "The file “bktaskapp_(null)” couldn’t be opened because there is no such file." UserInfo={NSURL=file:///Users/ryuuzaki/Library/Developer/CoreSimulator/Devices/2E4D6389-93B7-4542-B07F-9A02C720B9AF/data/Containers/Data/PluginKitPlugin/FA4415DF-D984-4394-80B9-EDA199AB587E/Library/com.apple.watchkit/bktaskapp_(null), NSFilePath=/Users/ryuuzaki/Library/Developer/CoreSimulator/Devices/2E4D6389-93B7-4542-B07F-9A02C720B9AF/data/Containers/Data/PluginKitPlugin/FA4415DF-D984-4394-80B9-EDA199AB587E/Library/com.apple.watchkit/bktaskapp_(null), NSUnderlyingError=0x79b0e340 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}中的视图{3}}

作为旁注我认为使用number of ways而不是MVC可以更好地解决您遇到的问题。它适用于MVC,可以是实现所需功能的更简单方法。将您的发布请求和数据库交互与决定返回哪个View的逻辑分开。