【问题标题】:I can not return to PartialView by using JSON我无法使用 JSON 返回 PartialView
【发布时间】:2013-09-05 02:28:10
【问题描述】:

我一直在寻找使用 json 的返回部分视图。但是我只能看到部分视图的名称为 html。

如果用户名和密码不为空,我想重定向到 PartialView。

[HttpGet]
public ActionResult Index()
{
return View();
}

索引视图:

<script type="text/javascript">
function test() {

var veri = {
KullaniciAd: $('#KullaniciAd').val(),
Sifre: $('#Sifre').val(),
};

$.ajax({
url: "/Home/Menu",
type: "POST",
dataType: "json",
contentType: 'application/json',
data: JSON.stringify(veri),
success: function (mydata) {

$("#message").html(mydata);
},
error: function () {
$("#message").html("error");
}
});

return false;

}
</script>

<input type="text" id="KullaniciAd" name="KullaniciAd" />
<input type="password" id="Sifre" name="Sifre" />
<input type="button" onclick="test()" value="Giriş" />


<div id="message"></div>

我的菜单操作结果

 public ActionResult Menu(MyModel model)
    {
        if (model.KullaniciAd != null && model.Sifre != null)
        {
            return Json("_MenuPartial", JsonRequestBehavior.AllowGet);

        }
        return null;
    }

【问题讨论】:

标签: jquery asp.net-mvc json


【解决方案1】:

你需要渲染视图到字符串

  public string RenderRazorViewToString(string viewName, object model)
  {
    ViewData.Model = model;
    using (var sw = new StringWriter())
    {
      var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
      var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
      viewResult.View.Render(viewContext, sw);
      viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
      return sw.GetStringBuilder().ToString();
     }
  }

在控制器中

var stringView = RenderRazorViewToString("_MenuPartial",model)
return Json(stringView , JsonRequestBehavior.AllowGet);

【讨论】:

    【解决方案2】:

    那是因为您只是将 _MenuPartial - string 作为 Json 数据返回。

    如果您想返回 JSON,则返回 JsonResult 而不是 ActionResult
    下面的代码也应该可以工作 - 最终,浏览器将从服务器获取 HTML 字符串作为 ajax 调用结果

    public ActionResult Menu(MyModel model)
    {
        if (model.KullaniciAd != null && model.Sifre != null)
        {
            return View("_MenuPartial");
    
        }
        return null;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多