3

ASP.NET MVC アプリケーションで、管理者が新しいメンバーを承認または拒否するためのロジックを作成しています。次のように、メンバーのリストと [承認] と [拒否] の 2 つのボタンを表示しています。

<% foreach (var mm in (ViewData["pendingmembers"] as List<MyMember>)) %>
<% { %>
   <tr><td>Username:<%=mm.UserName %></td><td>
   <tr><td>Firstname:<%=mm.FirstName %></td><td>
   ...etc...
   <tr>
      <td>
      <% using (Html.BeginForm("AcceptPendingUser", "Admin"))
      { %>
          <input type="submit" value="Accept" />
      <% } %>
      </td>
      <td>
      <% using (Html.BeginForm("RejectPendingUser", "Admin"))
      { %>
        <input type="submit" value="Reject" />
      <% } %>
      </td>
    </tr>
<% } %>

したがって、保留中のメンバー データのリストは MyMember-objects のリストにあります。各 MyMember オブジェクトはメンバーとして出力され、管理者が保留中のメンバーを承認または拒否するための 2 つのボタンが設定されます。

次に、コントローラーで、次のように、これら 2 つの入力フィールド/フォームの処理を分離しています。

public ActionResult AcceptPendingUser()
{
   // TODO: Add code to save user into DB and send welcome email.
   return RedirectToAction("Index");
}

public ActionResult RejectPendingUser()
{
   // TODO: Add code to remove user from PendingUsers list and send rejection email.
   return RedirectToAction("Index");
}

ユーザーが押したボタンの横にあるオブジェクトを直接取得したいと思います。ビューからコントローラーに MyMember オブジェクトを送信するにはどうすればよいですか? または、ボタンを押して数値インデックスを送信するにはどうすればよいですか? たぶん隠しフィールドで?

4

3 に答える 3

3

最も単純なオプションは、おそらく非表示の入力です。

<input type="hidden" value="<%=mm.Key%>" name="key" id="key" />

(それに応じて名前を付けます。各フォームで)

2 つのコントローラーは、"key" と呼ばれる引数を取ります (名前を変更します)。複数の入力からオブジェクトを解析する場合は、ModelBinder. もちろん、2*n フォームではなく、クエリ文字列ベースの URL を検討するか、jQuery (または他のスクリプト ヘルパー) などを使用して、フォームを必要とせずにデータを送信することを検討できます (スクリプトが利用可能な場合)。

于 2009-01-12T13:28:04.230 に答える
3

HTML ボタンを使用する代わりに、ActionLink の使用を検討し、承認されているメンバーの ID を含めるように構築してください。もう 1 つの方法は、管理者が承認するメンバーごとに選択できるチェックボックス (値は承認されるメンバーの ID) と、拒否用の同様のチェックボックス、およびフォーム全体の各承認/拒否ボタンを 1 つ持つことです。

于 2009-01-12T13:36:04.260 に答える
3

私自身と他のmvc初心者への回答:

最終的にこのコードで動作するようになりました:

見る:

 <%=Html.ActionLink(
     "Jump", 
     "Jump", 
     new { name=(ViewData["Person"] as Person).Name, 
     person=ViewData["Person"]}, 
     null) %>

コントローラ:

public ActionResult Index()
{
     ViewData["Title"] = "Home Page";
     ViewData["Message"] = "Welcome to ASP.NET MVC!";
     Person p = new Person();
     p.Name = "Barrack";
     p.Age = 35;
     ViewData["Person"] = p;
     return View();
}

public ActionResult Jump(string name, Person person)
{
    return View();
}

Jump メソッドでアプリをデバッグすると、name パラメーターには素敵な "Barrack" 文字列が返されますが、Person パラメーターは null です。

また、親切なコメンターが説明しようとしたことも理解しています。文字列や int などの単純なデータ型をコントローラーに送信するのは簡単ですが、Person オブジェクトなどの複雑な型には別のものが必要です。

基本的にintを渡すだけで十分です。ここで最も困難だったのは、ActionLink を設定する正しい方法を見つけることでした。

乾杯、ポム

于 2009-01-12T19:18:50.620 に答える