简体   繁体   English

如何在JsonResult上返回1值

[英]How to return 1 value on JsonResult

I have a problem where I need to use JsonResult but will return single value.. 我有一个需要使用JsonResult的问题,但将返回单个值。

May I ask is that possible and how should I use it in my Set of Codes 我想问一下这是可能的,我应该如何在我的代码集中使用它

I want to return the Address but I don't know if it is possible or not. 我想返回地址,但是我不知道是否可以。 .

public JsonResult LoadAddress()
        {

            Guid userId = (Guid)Membership.GetUser().ProviderUserKey;
            if (User.IsInRole("Administrator"))
            {
                var address = (from a in db.Clients
                               join b in db.Client_Location
                               on a.ID equals  b.ClientID
                               where a.userId == userId
                                     && a.LogicalDelete == false
                               select a).SingleOrDefault();
            }
            else if (User.IsInRole("Worker"))
            {
                var address = (from a in db.Workers
                               join b in db.Worker_Address
                               on a.ID equals  b.WorkerID
                               where a.userId == userId &&
                               a.LogicalDelete == false
                               select a).SingleOrDefault();

            }
            else if (User.IsInRole("Employer"))
            {
                var address = (from a in db.Client_Customer
                               join b in db.Client_Customer_Location
                               on a.ID equals b.Client_CustomerID
                               where a.userId == userId
                                     && a.LogicalDelete == false
                               select a).SingleOrDefault();
            }
            return Json(address, JsonRequestBehavior.AllowGet);
        }

Thank you in advance 先感谢您

public JsonResult LoadAddress()
        {
            Address address = null;
            Guid userId = (Guid)Membership.GetUser().ProviderUserKey;

            if (User.IsInRole("Administrator"))
            {
                address = (from a in db.Clients
                               join b in db.Client_Location
                               on a.ID equals  b.ClientID
                               where a.userId == userId
                                     && a.LogicalDelete == false
                               select a).SingleOrDefault();
            }
            else if (User.IsInRole("Worker"))
            {
                address = (from a in db.Workers
                               join b in db.Worker_Address
                               on a.ID equals  b.WorkerID
                               where a.userId == userId &&
                               a.LogicalDelete == false
                               select a).SingleOrDefault();

            }
            else if (User.IsInRole("Employer"))
            {
                address = (from a in db.Client_Customer
                               join b in db.Client_Customer_Location
                               on a.ID equals b.Client_CustomerID
                               where a.userId == userId
                                     && a.LogicalDelete == false
                               select a).SingleOrDefault();
            }
            return Json(address, JsonRequestBehavior.AllowGet);
        }

assuming you have a common interface for all the different address types (ie Clients , Workers and Client_Customer ), you could do: 假设您对所有不同的地址类型(例如ClientsWorkersClient_Customer )都有一个公共接口,则可以执行以下操作:

public interface IAddress{
    string Name{get;set;}
    string Street {get; set;}
    // etc
}

then, if all relevant address types implement the interface, you'd just do the following: 然后,如果所有相关的地址类型都实现了该接口,则只需执行以下操作:

IAddress address = null;
if (User.IsInRole("Administrator"))
{
    address = (IAddress)(from a in db.Clients... etc)
}
else if (User.IsInRole("Worker"))
{
    address = (IAddress)(from a in db.Workers... etc)

}
else if (User.IsInRole("Employer"))
{
    address = (IAddress)(from a in db.Client_Customer... etc)
}
else
{
    address = /// some other default that you want
}
return Json(address, JsonRequestBehavior.AllowGet);

[edit] - the typical implementation of this would look like, also, you'd need to cast your result as shown in the edit above (ie (IAddress)(etc) ): [edit] -它的典型实现也将需要像上面的编辑中(IAddress)(etc)结果(即(IAddress)(etc) ):

public class Client : IAddress {
    public string Name{get;set;}
    public string Street {get; set;}
    // etc
    /* now all your other unique properties*/
    public string ClientName{get;set;}    
}

public class Client_Customer : IAddress {
    public string Name{get;set;}
    public string Street {get; set;}
    // etc
    /* now all your other unique properties*/
    public string AnotherName{get;set;}    
}

public class Workers: IAddress {
    public string Name{get;set;}
    public string Street {get; set;}
    // etc
    /* now all your other unique properties*/
    public string WorkerName{get;set;}    
}

You can use ExpandoObject 您可以使用ExpandoObject

dynamic expando = new ExpandoObject();
if (User.IsInRole("Administrator"))
{
    expando.address = ...
}
else if (User.IsInRole("Worker"))
{
    expando.address = ...

}
else if (User.IsInRole("Employer"))
{
    expando.address = ...
}
return Json(expando.address, JsonRequestBehavior.AllowGet);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM