C# 如何在控制器内的操作中返回这两种类型的数据?
因此,我的控制器中有一个ActionResult,它应该从数据库中获取现有值并将参数返回到视图中 我的方法称为ReadMeasures,它获取角度和点数据。如果角度和点数据存在/不为空,我希望返回角度和点数据 我注意到我现在设置的方式,我只返回角度数据,因为当角度数据和点数据不为null时,代码只返回角度数据,而不返回点数据 如何在方法中同时返回角度和点数据 这是我的密码:C# 如何在控制器内的操作中返回这两种类型的数据?,c#,json,asp.net-mvc,C#,Json,Asp.net Mvc,因此,我的控制器中有一个ActionResult,它应该从数据库中获取现有值并将参数返回到视图中 我的方法称为ReadMeasures,它获取角度和点数据。如果角度和点数据存在/不为空,我希望返回角度和点数据 我注意到我现在设置的方式,我只返回角度数据,因为当角度数据和点数据不为null时,代码只返回角度数据,而不返回点数据 如何在方法中同时返回角度和点数据 这是我的密码: [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public ActionResult ReadMeasurements([DataSourceRequest] DataSourceRequest request, string viewType)
{
JsonResult json = new JsonResult();
List<AngleData> angledata = UserSession.GetValue(StateNameEnum.Planning, ScreenName.Planning.ToString() + "Angles" + viewType, UserSessionMode.Database) as List<AngleData>;
List<PointData> pointData = UserSession.GetValue(StateNameEnum.Planning, ScreenName.Planning.ToString() + "Points" + viewType, UserSessionMode.Database) as List<PointData>;
if (angledata != null)
{
List<PlanningViewParam> angles = new List<PlanningViewParam>();
foreach (AngleData i in angledata)
{
string col = "#" + ColorTranslator.FromHtml(String.Format("#{0:X2}{1:X2}{2:X2}", (int)(i.color.r * 255), (int)(i.color.g * 255), (int)(i.color.b * 255))).Name.Remove(0, 2);
int angleVal = (int)i.angleValue;
angles.Add(new PlanningViewParam()
{
Color = col,
Label = "Angle",
Value = angleVal,
Number = i.angleNumber
});
}
return json = Json(angles.ToDataSourceResult(request, i => new PlanningViewParam()
{
Color = i.Color,
Label = i.Label,
Value = i.Value,
Number = i.Number
}), JsonRequestBehavior.AllowGet);
}
if (pointData != null)
{
List<PlanningViewParam> points = new List<PlanningViewParam>();
foreach (PointData f in pointData)
{
string col = "#" + ColorTranslator.FromHtml(String.Format("#{0:X2}{1:X2}{2:X2}", (int)(f.color.r * 255), (int)(f.color.g * 255), (int)(f.color.b * 255))).Name.Remove(0, 2);
string pointAnglesVal = f.pointAnglesValue;
points.Add(new PlanningViewParam()
{
Color = col,
Label = "Points",
ValueTwo = pointAnglesVal,
Number = f.pointNumber
});
}
return json = Json(points.ToDataSourceResult(request, f => new PlanningViewParam()
{
Color = f.Color,
Label = f.Label,
Value = f.Value,
Number = f.Number
}), JsonRequestBehavior.AllowGet);
}
return null;
}
[OutputCache(NoStore=true,Duration=0,VaryByParam=“*”)]
public ActionResult ReadMeasurements([DataSourceRequest]DataSourceRequest请求,字符串视图类型)
{
JsonResult json=新的JsonResult();
列出angledata=UserSession.GetValue(StateNameEnum.Planning,ScreenName.Planning.ToString()+“Angles”+viewType,UserSessionMode.Database)作为列表;
列出pointData=UserSession.GetValue(StateNameEnum.Planning,ScreenName.Planning.ToString()+“Points”+viewType,UserSessionMode.Database)作为列表;
如果(angledata!=null)
{
列表角度=新列表();
foreach(AngleData中的AngleData i)
{
string col=“#”+ColorTranslator.FromHtml(string.Format(“#{0:X2}{1:X2}{2:X2})”,(int)(i.color.r*255),(int)(i.color.g*255),(int)(i.color.b*255)).Name.Remove(0,2);
int angleVal=(int)i.angleValue;
添加(新的PlanningViewParam()
{
颜色=颜色,
Label=“Angle”,
值=角度值,
编号=i.n编号
});
}
返回json=json(angles.ToDataSourceResult(请求,i=>new PlanningViewParam()
{
颜色,
标签=i.标签,
值=i.值,
编号=i.编号
}),JsonRequestBehavior.AllowGet);
}
if(pointData!=null)
{
列表点=新列表();
foreach(PointData中的PointData f)
{
string col=“#”+ColorTranslator.FromHtml(string.Format(“#{0:X2}{1:X2}{2:X2})”,(int)(f.color.r*255),(int)(f.color.g*255),(int)(f.color.b*255)).Name.Remove(0,2);
字符串pointAnglesVal=f.pointAnglesValue;
添加点(新的PlanningViewParam()
{
颜色=颜色,
Label=“积分”,
值2=点角度VAL,
Number=f.pointNumber
});
}
返回json=json(points.ToDataSourceResult(request,f=>newplanningviewParam()
{
颜色=f.颜色,
标签=f.标签,
值=f.值,
数字=f.数字
}),JsonRequestBehavior.AllowGet);
}
返回null;
}
创建一个同时包含它们的类型,并返回:
public class PointAndAngle
{
public Point Point { get; set; }
public Angle Angle { get; set; }
}
var pAndA = new PointAndAngle { Point = p, Angle = a };
return Json(pAndA);
如果需要,也可以使用匿名类型:
return Json(new { Point = p, Angle = a});
好的,如果你从一个函数返回,那么函数结束,你得到一个输出。您需要将这两种数据类型合并到一个可以返回的对象中 试试像这样的东西
public class data
{
public AngleData angle {get; set;}
public PointData point { get; set;}
}
在函数中返回类型为
data
的对象。使用属性创建一个新的复合类,例如angeldata Angle{get;set;}PointData Point{get;set;}
是否有其他方法来执行此操作,或者这是唯一的方法?编辑:当我创建类时,我必须将该类添加到我的模型中?不,你不会。您返回的是Json,所以这个类只用于此目的。所以,我将保持逻辑数据不变,但在返回jsonyup时同时返回点和角度。这不是你想要的吗?我最终返回了两个列表,就像你使用匿名类型返回的一样。好的,我将返回一个对象,但我也有我想要返回的json参数。所以它应该是具有不同点和角度参数结果的数据对象?只要它们是对象内部的参数,就可以了。请记住,从长远来看,颗粒化编程更容易调试,因此请尝试将代码分解为更小的块。