C# 在ASP.NET布局中呈现JSON字符串

C# 在ASP.NET布局中呈现JSON字符串,c#,json,asp.net-mvc,C#,Json,Asp.net Mvc,我有一个表单,在其中输入一些参数,它将表单输入返回给模型。然后,我在控制器中的[HttpPost]响应中使用,首先将表单的结果输入一个方法,从API返回一个C#对象。这是一个样品 [HttpPost] public ActionResult MyView(MyModel myModelResponse) { var myVar = myModelResponse.UID; var myVar2 = myModelRepsonse.name; ObjectMethod myMethod = ne

我有一个表单,在其中输入一些参数,它将表单输入返回给模型。然后,我在控制器中的[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字符串以及带有导航的布局。如何在post响应视图中同时返回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" /> 
}
@{
Layout=“~/Views/Shared/_Layout.cshtml”;
}
@使用(Html.BeginForm()){
@Html.ValidationSummary()
@Html.TextBoxFor(x=>x.UID)

@Html.TextBoxFor(x=>x.Name)

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

例如


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

视图:

行动:

[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);
}
[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);
}
但是,如果您绝对坚持在视图中使用Json字符串,请将其作为字符串传递:

视图:

@model string

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

我经常这样做,试试这个

在控制器中:

[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>
@modelYourModelClass
@{
字符串json=Newtonsoft.json.JsonConvert.SerializeObject(模型);
}
var myJsonObject=@Html.Raw(json);

这样,您仍然可以访问model对象@model

并对其进行智能感知。如果这不是一个ajax请求,为什么您要序列化为Json,而不仅仅是创建一个普通的Razor视图,该视图具有与
myObject
相同类型的模型?对象肯定会发生很大变化,因此,每次对象更新时重新定义模型是一件痛苦的事情。使用反射对对象来说也很困难,因为它有字典。你想返回布局是什么意思?你能展示你的观点和你想要达到的目标吗?似乎您正在向常规控制器发帖,但序列化为JSON,这没有任何意义。然后让您的视图模型类型<代码>动态可能?实际上,仔细想想,您希望如何在视图中处理JSON?
[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>