0

viewModelを返すコントローラーがあります。

そのviewModelには、Usersというプロパティがあります。これは、現在システムにアカウントを持っているすべてのユーザー名の配列です。これは、jqueryタグ付けプラグインに使用されます。

Usersプロパティは、配列をビューに正しく送信します

しかし@Model.Users、ビューで使用すると、タイプが取得されます。System.String[]

これはとてつもなく簡単に解決できるものだと思います。

コントローラ

public virtual ActionResult Create(int id)
    {

        var viewModel = new AttendeeViewModel();

        var data = viewModel.GetMembershipUserList() ;
        viewModel.MeetingID = id;

        viewModel.Users = data.ToArray();

        return View(viewModel);
    } 

ViewModel

public class AttendeeViewModel
{

    public int AttendeeId { get; set; }
    public string Name { get; set; }
    public int MeetingID { get; set; }
    public string[] Users { get; set; }

    public List<string> GetMembershipUserList()
    {
        List<string> userNames = new List<string>();
        foreach (MembershipUser user in Membership.GetAllUsers())
        {
            userNames.Add(user.UserName);
        }

        return userNames;

    }
}

使用法を表示

<script type="text/javascript">

    var tags = @Model.Users

    $(document).ready(function () { $("#mytags").tagit({ availableTags: tags }); });


</script>
4

2 に答える 2

1

@Model.UsersビューにダンプModel.Users.ToString()するのと同じです。特定の用途では、JavaScript配列としてレンダリングする必要があります。AC#文字列配列はこれを行う方法を知りません。何かのようなもの :

 var tags = [ @( string.Join("," Model.Users.Select(s => "'" + s + "'").ToArray()) ) ];

ViewModelからこれを実行し、そのようなものを持っている方がおそらく良いでしょうModel.UsersAsJavaScriptArrayが。これを頻繁に行う場合は、おそらくHtmlHelperの拡張メソッドを作成して実行します。@Html.AsJavaScriptArray(Model.Users)

于 2011-04-22T19:22:33.787 に答える
1

Mattが言ったように、<%=%>または@を使用して何かを出力しようとすると、.ToString()になります。

代わりにあなたは試すことができます...

ViewModel.UsersJson = new JavascriptSerializer().Serialize(data.ToArray());

または、必要なものだけをシリアル化することもできます...

ViewModel.UsersJson = new JavascriptSerializer().Serialize(data.ToArray().Select(u => new { Username = u.Username, FirstName = u.FirstName });

..。

var tags = @Model.UsersJson
于 2011-04-23T05:54:02.373 に答える