Asp.net mvc 当对象不是字符串时,如何从ViewData中检索值?

Asp.net mvc 当对象不是字符串时,如何从ViewData中检索值?,asp.net-mvc,viewdata,Asp.net Mvc,Viewdata,下面是我想利用的功能:我有一个类myClass,并希望迭代一个包含该类所有属性的集合。我希望将该集合的索引与其他数据一起发送,以便控制迭代的每个序列 这里是操作方法和视图的简化版本,我将使用相同的操作视图来实现该功能 1行动 public ActionResult CreateHierarchy(int? index) { if(index < PropertiesOfMyClass.Lenght) { //Other code omitted ViewDat

下面是我想利用的功能:我有一个类myClass,并希望迭代一个包含该类所有属性的集合。我希望将该集合的索引与其他数据一起发送,以便控制迭代的每个序列

这里是操作方法和视图的简化版本,我将使用相同的操作视图来实现该功能

1行动

public ActionResult CreateHierarchy(int? index)
{

  if(index < PropertiesOfMyClass.Lenght)
  {
    //Other code omitted 

    ViewData["index"] = ((index == null) ? 1 : index++);

    Return View();  
  }
}
一旦我在一个集合中拥有了上述属性,我就可以依次从Level1到Level7迭代该集合,因为每个级别的值都可以有许多源。指数对我来说很重要,因为我依赖它来向前或向后移动

此外,我在操作和视图2中都提供了逻辑1,这样就可以了解索引是如何在操作和视图之间来回传递的


感谢您的帮助

您最初传递给此操作方法1的值是多少?如果是这样的话,当您将++操作用作后缀操作时,将始终返回1。也就是说,在分配给ViewData后,该值将增加。如果您执行前缀操作,您的问题应该得到解决,当然前提是我上面的前提是正确的

有关前缀v的详细信息。后缀操作请参见

我还应该指出,您的布尔表达式将始终计算为false,因为Nullable==null总是false。相反,您应该考虑修改表达式或类似的内容:

ViewData["index"] = ((index.HasValue) ? index.Value + 1 : 1);

在查看其他论坛后,我被提醒ViewData保留值,以便在出现问题时可以显示它。要获得所需的功能,我需要使用以下语句清除first ViewData:

ViewData.ModelState.Clear();
ViewData["index"] = index + 1; 

第二条语句更好,因为它只处理一个条目,而不是清除整个ViewData字典。之后,如果我使用Clear或重新创建一个名为ViewData[index]的新条目,并将值index+1分配给它,我可以重新分配一个新值=index+1


感谢您的所有回答。

PropertiesOfCyclass.Length返回1或更低值的可能性有没有?如果删除该条件元素,使索引始终递增,会发生什么情况?我在代码中根本看不到MyClass。从您所描述的内容来看,代码生成的正是它应该生成的内容。你能更具体地说明你到底想做什么,结果应该是什么吗?什么叫这个:CreateHierarchyint?指数你有没有可能总是将null传递给它,所以它的计算结果不是整数递增,而是1?@Lazarus、@NickLarsen和@SlackerCoder-看起来我不够清楚。有关答案,请参见编辑。@MCGuire-我喜欢你的表达式。现在,如何检索索引值,以便将其再次注入到action方法中?这是正确的吗这是正确的吗??我想知道我是否需要在ViewData前面添加一个强制转换-就像这样-intViewData[index]当我这样做时-intViewData[index]-作为隐藏字段的值,我得到一个异常-对象未设置为对象的实例-。因此,如果每个HTML标记都将其值存储为字符串,可能我的操作中需要一些强制转换???您的异常可能是由ViewData不包含键“index”引起的,由于您对该键的赋值发生在if语句中,因此最初可能没有设置该键,从而导致该异常。我能够找到获得该异常的原因。现在,我想知道,也许我的动作不应该有-int?索引参数,而是字符串索引参数??怎么样?
<% = Html.Hidden("index", (int)ViewData["index"])%>
public class Hierarchy
{
public int HierarchyID { get; set;}
public string Level1 { get; set; }
public string Level2 { get; set; }
        ----
public string Level7 { get; set; }
}
ViewData["index"] = ((index.HasValue) ? index.Value + 1 : 1);
ViewData.ModelState.Clear();
ViewData["index"] = index + 1; 
ModelState.Remove("index")
ViewData["index"] = index + 1;