C# 如何在控制器内的操作中返回这两种类型的数据?

C# 如何在控制器内的操作中返回这两种类型的数据?,c#,json,asp.net-mvc,C#,Json,Asp.net Mvc,因此,我的控制器中有一个ActionResult,它应该从数据库中获取现有值并将参数返回到视图中 我的方法称为ReadMeasures,它获取角度和点数据。如果角度和点数据存在/不为空,我希望返回角度和点数据 我注意到我现在设置的方式,我只返回角度数据,因为当角度数据和点数据不为null时,代码只返回角度数据,而不返回点数据 如何在方法中同时返回角度和点数据 这是我的密码: [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")

因此,我的控制器中有一个ActionResult,它应该从数据库中获取现有值并将参数返回到视图中

我的方法称为ReadMeasures,它获取角度和点数据。如果角度和点数据存在/不为空,我希望返回角度和点数据

我注意到我现在设置的方式,我只返回角度数据,因为当角度数据和点数据不为null时,代码只返回角度数据,而不返回点数据

如何在方法中同时返回角度和点数据

这是我的密码:

[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参数。所以它应该是具有不同点和角度参数结果的数据对象?只要它们是对象内部的参数,就可以了。请记住,从长远来看,颗粒化编程更容易调试,因此请尝试将代码分解为更小的块。