Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在asp.net mvc视图中使用元组?_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Tuples - Fatal编程技术网

C# 如何在asp.net mvc视图中使用元组?

C# 如何在asp.net mvc视图中使用元组?,c#,asp.net,asp.net-mvc,asp.net-mvc-4,tuples,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Tuples,我有以下控制器: public class ModuleController : Controller { // GET: Modulo public ActionResult GetModules() { return PartialView(Module.GetModulesForUser(ClaimsPrincipal.Current.Identities.First().Name)); }

我有以下控制器:

 public class ModuleController : Controller
    {
        // GET: Modulo
        public ActionResult GetModules()
        {
            return PartialView(Module.GetModulesForUser(ClaimsPrincipal.Current.Identities.First().Name));
        }
    }
这将为用户返回模块

  /// <summary>
        /// Gets the modules activated for a user
        /// </summary>
        /// <returns>List of modules for the selected user</returns>
        public static Tuple<string, List<Modulo>> GetModulesForUser(string identityname)
        {
            // It needs to be cached for every user because every user can have different modules enabled.
            var cachekeyname = "ApplicationModulesPerUser|" + identityname;

            var cache = CacheConnectionHelper.Connection.GetDatabase();
            Tuple<string, List<Modulo>> modulosPorUsuarioDeDirectorioActivo;

            //get object from cache
            string modulosUsuariosString = cache.StringGet(cachekeyname);
            //string modulosUsuariosString;
            if (!string.IsNullOrEmpty(modulosUsuariosString))
            {
                modulosPorUsuarioDeDirectorioActivo = JsonConvert.DeserializeObject<Tuple<string, List<Modulo>>>(modulosUsuariosString);
                return modulosPorUsuarioDeDirectorioActivo;
            }

            var extPropLookupNameModulos = $"extension_{SettingsHelper.ClientId.Replace("-", "")}_{"Modulos"}";
            var client = AuthenticationHelper.GetActiveDirectoryClient();
            var user = client.Users.GetByObjectId(identityname).ExecuteAsync().Result;
            var userFetcher = (User)user;
            var unitOfWork = new UnitOfWork();
            var keyvaluepairModulos = userFetcher.GetExtendedProperties().FirstOrDefault(prop => prop.Key == extPropLookupNameModulos);
            var idsModulos = keyvaluepairModulos.Value.ToString().Split(',');
            var listaModulos= idsModulos.Select(idModulo => unitOfWork.ModuloRepository.GetById(Convert.ToInt32(idModulo))).ToList();
            modulosPorUsuarioDeDirectorioActivo = new Tuple<string, List<Modulo>> ( identityname, listaModulos);
            //convert object to json string
            modulosUsuariosString = JsonConvert.SerializeObject(modulosPorUsuarioDeDirectorioActivo);
            //save string in cache
            cache.StringSet(cachekeyname, modulosUsuariosString, TimeSpan.FromMinutes(SettingsHelper.CacheModuleNames));
            return modulosPorUsuarioDeDirectorioActivo;
        }
//
///获取为用户激活的模块
/// 
///所选用户的模块列表
公共静态元组GetModulesForUser(字符串标识符名称)
{
//它需要为每个用户缓存,因为每个用户都可以启用不同的模块。
var cachekeyname=“ApplicationModulesPerUser |”+identityname;
var cache=CacheConnectionHelper.Connection.GetDatabase();
元组ModulesOrusualidedDirectorIOActivo;
//从缓存中获取对象
string moduleSuariosString=cache.StringGet(cachekeyname);
//字符串模块suariosstring;
如果(!string.IsNullOrEmpty(modulesSuariosString))
{
ModulesOrusualidedDirectorIOActivo=JsonConvert.DeserializeObject(ModulesSuariosString);
返回模块orusuariodedirectorioactivo;
}
var extPropLookupNameModules=$“extension_{SettingsHelper.ClientId.Replace(“-”,“)}{“modules”}”;
var client=AuthenticationHelper.GetActiveDirectoryClient();
var user=client.Users.GetByObjectId(identityname).ExecuteAsync().Result;
var userFetcher=(User)User;
var unitOfWork=新的unitOfWork();
var keyvaluepairModulos=userFetcher.GetExtendedProperties().FirstOrDefault(prop=>prop.Key==extPropLookupNameModulos);
var idsModulos=keyvaluepairModulos.Value.ToString().Split(',');
var listaModulos=idsModulos.Select(idModulo=>unitOfWork.ModuleRopository.GetById(Convert.ToInt32(idModulo)).ToList();
ModulesPorUsariodedDirectorIOActivo=新元组(identityname,listaModulos);
//将对象转换为json字符串
ModulesSuariosString=JsonConvert.SerializeObject(ModulesOrUsariodedDirectorIOActivo);
//在缓存中保存字符串
StringSet(cachekeyname,moduleSuariosString,TimeSpan.FromMinutes(setingShelper.CacheModuleNames));
返回模块orusuariodedirectorioactivo;
}
然而,我需要在局部视图中能够访问元组,然后呈现它

model Tuple<string,List<xx.Models.GlobalAdmin.Models.Modulo>;

@foreach (var module in Model.Modules)
{
    <i class="fa @(@module.ClaseFontAwesome)" title="@module.Nombre"></i>
}

模型元组您可以通过
Item1
,…
ItemN
属性访问元组的组件

试试这个:

@foreach (var module in Model.Item2)

元组没有无参数构造函数,这可能是导致此问题的原因。为什么不创建一个包含字符串和列表的viewmodel并将其传递给视图?
Ref

您可以将@model设置为动态对象,并将其强制转换为Tuple对象

@model dynamic 

 @{
   var result= model as Tuple<string,List<xx.Models.GlobalAdmin.Models.Modulo>;
 }
@模型动态
@{

var result=model as tupleb但第一行甚至没有编译。如果这不能解决您的问题,为什么这是公认的答案?