C# 在ASP.NET布局中呈现JSON字符串
我有一个表单,在其中输入一些参数,它将表单输入返回给模型。然后,我在控制器中的[HttpPost]响应中使用,首先将表单的结果输入一个方法,从API返回一个C#对象。这是一个样品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]
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>