【问题标题】:how can access to tuple item in asp.net-mvc 5 view c#7.2如何在asp.net-mvc 5视图c#7.2中访问元组项
【发布时间】:2018-02-06 16:23:28
【问题描述】:

我用过c# 7.2(c#最新次要版本(latest))

我想发送两个模型,其中包含 Tuple 和已命名的项目。 在控制器中,我使用名称创建元组:

   public ActionResult Create(Guid fitnessPlanId)
        {
            #region GetCurrentFitnessPlan

            var currentFitnessPlan= _service.FitnessPlanRepository.Get(fitnessPlanId, null, null);
            if (currentFitnessPlan == null) return HttpNotFound();

            #endregion
            _currentUser = _service.UserRepository.GetUserByUsername(User.Identity.Name);

           (FitnessPlan fitnessPlan , FitnessPlanDay fitnessPlanDay) tupleModel =(currentFitnessPlan, null);  

            return View(tupleModel);
        }

鉴于我是这样写的:

@model (FitnessPlan fitnessPlan, FitnessPlanDay fitnessPlanDay)

当像这样在视图中使用元组时:

<th>@Html.DisplayNameFor(model => model.fitnessPlan.User.Sex)</th>

DisplayNameFor告诉我一个错误:

类型参数不能从用法中推断出来。尝试指定 明确的类型参数。

我在互联网上进行了研究,但没有找到任何结果。 如何通过命名视图中的项目来使用 Tuple?

---固定---

关于答案Georg Patscheider和这篇文章:Can a C# named Tuple be used as an MVC page model type?

解决此问题的唯一方法是更改​​动作控制器中的var tupleModel = new Tuple&lt;FitnessPlan, FitnessPlanDay&gt;(currentFitnessPlan, null); 和 模型到@model Tuple&lt;FitnessPlan, FitnessPlanDay&gt;上查看并使用&lt;th&gt;@Html.DisplayNameFor(model =&gt; model.Item1.User.Sex)&lt;/th&gt;

【问题讨论】:

    标签: c# asp.net asp.net-mvc


    【解决方案1】:

    处理这个问题的简洁方法是引入一个包装FitnessPlanFitnessPlanDay 的新ViewModel。

    public CreateFitnessPlanViewModel {
        public FitnessPlan Plan { get; set; }
        public FitnessPlanDay Day { get; set; }
    }
    

    剃须刀:

    @model CreateFitnessPlanViewModel
    <th>@Html.DisplayNameFor(model => model.Plan.User.Sex)</th>
    

    话虽如此,您可以使用Item1Item2、...ItemN 访问元组的元素:

    var tuple = new Tuple<FitnessPlan, FitnessPlanDay>(fitnessPlan, fitnessPlanDay);
    var plan = tuple.Item1;
    var day = tuple.Item2;
    

    所以你可以使用:

    @Html.DisplayNameFor(model => model.Item1.User.Sex)
    

    【讨论】:

    • 您的权利。对像我这样的人有用的信息:stackoverflow.com/questions/45842565/…
    • OP 的方法是Create(),暗示它是一个用于创建/编辑数据的视图,这意味着您不能使用Tuple(它没有无参数构造函数,因此不能在 POST 方法中绑定)。并且视图模型应该包含数据模型
    猜你喜欢
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多