【问题标题】:Ajax loading Mvc Content ErrorAjax 加载 Mvc 内容错误
【发布时间】:2014-01-27 21:59:26
【问题描述】:

我知道,有几个问题几乎相同。但我想不通,我的错误在哪里。

所以一开始我的情况: 我将使用 ajax 加载我的内容并将其推送到网站。

$.ajax({
url: _this.url,
contentType: "application/html; charset=utf-8",
type: "GET",
dataType: "html",
data: {
    stamp: Date.now()
},
success: function (result) {
    _this.app = $("<div id='" + _this.frameId + "' />")
        .addClass("place-top-left page")
        .css({
            "height": "100%",
            "z-index": 4000
        })
        .append($(result))
        .appendTo(document.body);
    if (loadedCallback) {
        loadedCallback();
    }
},
error: function (xhr, status) {
    alert(xhr.responseText);
}
});

我的控制器:

public ActionResult Edit(int id)
{
var howToContent = Manager.Get(id);

var howToModel = new HowToModel()
{
    MediaID = howToContent.Media.ID,
    HowToTitle = howToContent.Title,
    Name = howToContent.Name,
    BusinessIds = howToContent.BusinessIDs.Select(it => it.ToString()).ToArray()
};

return View(howToModel);
}

我的观点:

@model Hsetu.Help.Web.Areas.System.Models.HowTo.HowToModel           
@{
   ViewBag.Title = "Leitfaden bearbeiten";
   Layout = "~/Areas/System/Views/Shared/AppSite.cshtml";
}

@section ScriptCSS{
  @Scripts.Render("~/uploadScripts")
}

@using (Html.BeginForm())
{
   <fieldset>
       <label>
          @Html.EditorFor(m => m.Name)
       </label>
       <label>
          @Html.EditorFor(m => m.HowToTitle)
       </label>
       <label>
          @Html.EditorFor(m => m.BusinessIds)
       </label>
   </fieldset>
}

错误是: 传入字典的模型项是 Hsetu.Help.Web.Areas.System.Models.HowTo.HowToModel 类型,但是这个字典需要 System.Web.Mvc.MvcHtmlString 类型的模型项

因此,如果我调试代码,它将逐步执行控制器和视图。我也会得到正确的模型和价值观!

只有来自 ajax 的成功函数的结果是带有此错误消息的 json 返回。

这适用于相同的代码,但无需将此 howToModel 传递到视图中。


另一方面,我发现,如果像这样不正确使用 ajaxcall,它也会起作用吗?!抱歉.. 但是 WTF 是这个 ajaxcalls 之间的差异??????

$.ajax({
    url: _this.url,
    contentType: 'application/html; charset=utf-8',
    type: 'GET',
    dataType: 'html',
    data: {                        
        stamp: Date.now()
    }
})
.success(function (result) {
    _this.app = $("<div id='" + _this.frameId + "' />")
    .addClass("place-top-left page")
    .css({
        "height": "100%",
        "z-index": 4000
    })
    .append($(result))
    .appendTo(document.body);
if (loadedCallback) {
    loadedCallback();
}
})
.error(function (xhr, status) {
    alert(xhr.responseText);
});

所以我的问题是,我怎样才能让第一个 ajaxcall 工作?我需要这种语法..所以没有办法。也许有人可以解释一下ajax之间的区别。找不到真正必要的理由! 谢谢

【问题讨论】:

  • 将视图放入视图中是个坏主意。您需要更改控制器以返回部分视图。不过,您没有指定部分名称。你想通过这个电话返回什么?
  • 我正在尝试获取视图的 html 内容。我也尝试返回 PartialView() Content() 和 MvcHtmlString 总是同样的错误!
  • ajax 调用旨在更新字段或检查信息。或更新部分。它们不是为整个视图替换而设计的。返回视图将包括您的布局页面、参考资料和许多您不需要重复的其他内容
  • 如果您在这种情况下看到它,它类似于局部视图的更新!我不会用 html/body 标签渲染整个页面!它只是一个带有表单的 div。

标签: javascript jquery ajax asp.net-mvc asp.net-mvc-4


【解决方案1】:

ajax 调用的区别在于.error() 调用on .ajax() 调用的返回对象返回一个deferred object,它是可链接的,并且允许多个处理程序进行设置,而在 in 中传递 error: 函数只能在每个 ajax() 调用中执行一次——我相信这是一种较旧的语法。

(顺便说一句,.error() 已弃用,您应该改用 .fail() - 如果您使用的是这种方法)

关于您的 MVC(服务器端)错误:当我尝试将 null 属性值传递给强类型帮助程序时,这通常是我收到的错误消息。检查.Name.HowToTitle.BusinessIds 的值是否存在空值。

【讨论】:

  • 我已经检查了所有属性.. 没有什么是空的!就像我在我的问题中写的那样,价值观和一切对我来说似乎都很好!
猜你喜欢
  • 2022-08-16
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多