【问题标题】:Rendering a JSON String inside a ASP.NET Layout在 ASP.NET 布局中呈现 JSON 字符串
【发布时间】:2015-08-11 02:09:59
【问题描述】:

所以我有一个表单,您可以在其中输入一些参数,并将表单输入返回给模型。然后,我在控制器中的 [HttpPost] 响应中使用,首先将表单的结果输入到一个方法中,以从我的 API 返回一个 C# 对象。这是一个示例

[HttpPost]
public ActionResult MyView(MyModel myModelResponse) 
{
var myVar = myModelResponse.UID;
var myVar2 = myModelRepsonse.name;
ObjectMethod myMethod = new ObjectMethod // calls new object 
var myObject = myMethod.ObjectMethodObject(myVar, myVar2);

string JsonObject = JsonConvert.SerializeObject(myObject);

return JsonObject;
}

我使用 JSON.NET 将我的对象序列化为 JSON 字符串。我想返回 JSON 字符串以及具有导航的布局。如何在发布响应视图中同时返回 JSON 字符串和布局?

感谢您的帮助!

编辑 - 这是我要求的观点:

@{ 

Layout = "~/Views/Shared/_Layout.cshtml";

}

<html>
<body> @using (Html.BeginForm()) {

@Html.ValidationSummary()
<p> @Html.TextBoxFor(x => x.UID) </p> 
<p> @Html.TextBoxFor(x => x.Name)</p> 

<input type="submit" value="Submit Object" /> 
}

【问题讨论】:

  • 如果这不是一个 ajax 请求,你为什么要序列化到 Json 而不仅仅是创建一个与 myObject 具有相同类型的模型的普通 Razor 视图?
  • 对象必然会发生很大的变化,所以每次更新对象时重新定义模型是一件很痛苦的事情。对对象使用反射也很困难,因为它有字典
  • 你想返回布局是什么意思?你能展示你的观点和你想要完成的事情吗?好像您正在发布到常规控制器但序列化为 JSON,这没有任何意义。
  • 然后让你的视图模型类型dynamic也许?
  • 其实想多了,你期望如何处理你认为的Json?

标签: c# json asp.net-mvc


【解决方案1】:

由于您想在视图中返回整个布局,我建议您根本不要序列化它,只需将对象本身传递给视图。例如:

查看:

@model SomeObject
//View code goes here

行动:

[HttpPost]
public ActionResult MyView(MyModel myModelResponse) 
{
    var myVar = myModelResponse.UID;
    var myVar2 = myModelRepsonse.name;
    ObjectMethod myMethod = new ObjectMethod // calls new object 
    var myObject = myMethod.ObjectMethodObject(myVar, myVar2);

    return View(myObject);
}

但是,如果你绝对坚持在视图中使用 Json 字符串,那么将其作为字符串传递:

查看:

@model string

<script type="text/javascript">
    var jsonData = @Model;
    //snip
</script>

行动:

[HttpPost]
public ActionResult MyView(MyModel myModelResponse) 
{
    var myVar = myModelResponse.UID;
    var myVar2 = myModelRepsonse.name;
    ObjectMethod myMethod = new ObjectMethod // calls new object 
    var myObject = myMethod.ObjectMethodObject(myVar, myVar2);

    string JsonObject = JsonConvert.SerializeObject(myObject);

    return View(JsonObject);
}

【讨论】:

    【解决方案2】:

    您可以使用Json() 方法返回Anonymous 类型。匿名类型可以包含属性。

    例如

    public ActionResult MyView(MyModel myModelResponse)
    {
        // ... You logic goes here to fetch the Json data and layout data.
        return Json(new 
        { 
            result = JsonObject,
            layout = LayoutData
        };
    }
    

    【讨论】:

      【解决方案3】:

      我经常这样做,试试这个

      在您的控制器中:

      [HttpPost]
      public ActionResult MyView(MyModel myModelResponse) 
      {
          //code
         YourModelClass model = new YourModelClass();
          // mapping or mode code
         return View(model);
      }
      

      在你看来:

      @model YourModelClass
      
      @{
        string json = Newtonsoft.Json.JsonConvert.SerializeObject(Model);
      }
      
      <script type="text/javascript">
          var myJsonObject = @Html.Raw(json);
      </script>
      

      这样你仍然可以访问和智能感知你的模型对象@Model

      【讨论】:

        猜你喜欢
        • 2018-10-07
        • 2013-02-13
        • 2013-03-11
        • 2016-11-16
        • 2015-08-02
        • 2011-01-28
        • 1970-01-01
        • 2015-04-11
        • 1970-01-01
        相关资源
        最近更新 更多