0

以下は、私のコントローラーとビューの要約です。ビューから GetUserDistinguished メソッドを呼び出したいと思います。これは単なる化粧品です。Guid は醜く、エンド ユーザーには意味がありませんが、これは私がユーザーに使用している一意の ID です。

namespace Users.Controllers
{ 
    public class UsersController : Controller
    {

        public ViewResult Index()
        {    
            var users = db.Users.Include("Users");    
            return View(users.ToList());
        }

        public string GetUserDistinguished(string Guid)
        {
            return ADHelper.ConvertGuidToDn(Guid);
        }
    }
}





@model IEnumerable<Test.GuidToDistinguishedName>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th>
            Name from Guid
        </th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Guid)
        </td>
    </tr>
}

</table>
4

2 に答える 2

0

達成したいことに応じて、2つのアプローチをとることができます。

  1. ページにGUIDと識別名のペアを表示する場合は、そのようなペアのコレクションをビューのモデルとして設定する必要があります。

  2. ユーザーがどこかをクリックしたときに識別名を表示する場合は、GUIDを受け入れ、その識別名を他の必要なデータとともに別のビューのモデルとして設定するアクションを追加する必要があります。

サンプルコードを見ると、シナリオが何であるかわかりません。

編集:

あなたのコメントに基づくと、最初のアプローチは正しいものです。コントローラーのビューのすべてのデータを準備し、それをモデルに配置する必要があります。

このようにメソッドを変更してIndex、GUIDと識別名のペアを設定できます(もちろん、より多くのデータを渡す必要がある場合は、モデルとして独自のカスタムクラスをいつでも使用できます-それはさらに推奨されます):

public ViewResult Index()
{    
    var users = db.Users.Include("Users").ToList();    
    var model = users.ToDictionary(u => u.Guid, u => GetUserDistinguished(u.Guid));
    return View(model);
}

次に、ビューでペアを反復処理して、テーブルに表示できます。

<table>
  <tr>
    <th>
      Guid
    </th>
    <th>
      Name
    </th>
  </tr>

@foreach (var item in Model) {
  <tr>
    <td>
        @Html.DisplayFor(modelItem => item.Key)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Value)
    </td>
  </tr>
}

</table>

私の場合、ページの上部に適切なモデルタイプを設定することを忘れないでください。

@model Dictionary<string, string>
于 2012-10-26T19:15:42.020 に答える
0

ビューはコントローラーを呼び出すべきではありません。それはMVCパターンを壊します。

代わりに、データをビューに渡す前にコントローラに必要な変更を加えさせ、データの表示と新しい入力の取得のみをビューに任せます。

于 2012-10-26T19:10:56.693 に答える