Контроллер возвращает содержимое массива, но, на мой взгляд, я получаю только тип? MVC - PullRequest
0 голосов
/ 22 апреля 2011

У меня есть контроллер, который возвращает viewModel.

У этого viewModel есть свойство Users, которое представляет собой массив всех имен пользователей, которые в данный момент имеют учетную запись в системе. Используется для плагина тегов jquery.

Свойство Users правильно отправляет массив в представление

Но когда я использую @Model.Users в представлении, я просто получаю тип ie; 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>

Ответы [ 2 ]

1 голос
/ 23 апреля 2011

Как сказал Мэтт, когда вы пытаетесь вывести что-то, используя <% =%> или @, оно просто собирается .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
1 голос
/ 22 апреля 2011

@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)

...