0

活用したい機能は次のとおりです。クラスmyClassがあり、そのクラスのすべてのプロパティを含むコレクションを反復処理したいと考えています。反復の各シーケンスを制御できるように、そのコレクションのインデックスを他のデータと共に送信したいと思います。

Action メソッドと View の簡略化されたバージョンを次に示します (その機能には同じアクション ビューを使用します)。

1) アクション

public ActionResult CreateHierarchy(int? index)
{

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

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

    Return View();  
  }
}

2)見る

<% Using(Html.BeginForm()){%>      
   //Other Code omitted

   <% = Html.Hidden("Index", ViewData["index"])%>
   <input type = "submit" value = "Do someting"/>
 <%}%>

インデックスの値を確認できるように、これもページの下部に配置しました。

<% = ViewData["index"]%>

残念ながら、それは機能していません。番号 1 しか取得できません。何か不足していますか? Viewdataのキャストなど?私はこのようなものを書くべきですか:

<% = Html.Hidden("index", (int)ViewData["index"])%>

それも機能していません

=======編集4月6日/ 08h37AM

myClass の本当の名前は Hierarchy で、このようないくつかのレベルが含まれています

public class Hierarchy
{
public int HierarchyID { get; set;}
public string Level1 { get; set; }
public string Level2 { get; set; }
        ----
public string Level7 { get; set; }
}

コレクションに上記のプロパティを設定したら、そのコレクションをレベル 1 からレベル 7 まで順番に繰り返すことができます (各レベルの値は多数のソースを持つことができるため)。インデックスは、前後に移動するために依存しているため、私にとって重要です。

また、アクションとビュー (2) の両方でロジック (1) を提供したので、アクションとビューの間でインデックスがどのようにやり取りされるかを追跡できます。

助けてくれてありがとう

4

2 に答える 2

1

この Action メソッドに最初に渡す値は 1 ですか? その場合、++ 操作を後置操作として使用しているため、一貫して 1 を返します。つまり、ViewData への割り当てが行われた後、値がインクリメントされます。もちろん、上記の私の前提が真であれば、プレフィックス操作を実行すると問題は解決するはずです。

前置操作と後置操作の詳細については、MSDN の ++ 演算子の記事を参照してください。

Nullable<T> == null は常に false であるため、ブール式は常に false と評価されることにも注意してください。代わりに、その式を (または同様のものに) 変更することを検討する必要があります。

ViewData["index"] = ((index.HasValue) ? index.Value + 1 : 1);
于 2010-04-06T12:50:15.777 に答える
0

他のフォーラムをチェックした後、問題が発生した場合に表示できるように ViewData が値を保持していることを思い出しました。必要な機能を得るには、次のステートメントを使用して、最初の ViewData をクリアする必要があります。

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

また

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

2 番目のステートメントは、(ViewData ディクショナリ全体をクリアするのではなく) 1 つのエントリのみを処理するため、優れています。その後、新しい値 = index + 1 (Clear() を使用する場合) を再割り当てするか、ViewData["index"]という新しいエントリを再作成して値index + 1を割り当てます。

ご回答ありがとうございます。

于 2010-04-07T13:48:54.063 に答える