控制器返回数组的内容,但在我看来,我只得到类型?MVC

Controller returns the contents of the array, but in my view i only get the type? MVC

本文关键字:类型 MVC 数组 返回 控制器 在我看来      更新时间:2023-09-26

我有一个返回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);
    } 

视图模型

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>

@Model.Users相当于将Model.Users.ToString()倾倒到视图中。对于您的特殊用途,您需要将其呈现为JavaScript数组。c#字符串数组不知道如何做到这一点。例如:

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

虽然它可能更好地做到这一点,从ViewModel,只是有Model.UsersAsJavaScriptArray或类似的东西。如果我经常这样做,我可能会为HtmlHelper创建一个扩展方法并做@Html.AsJavaScriptArray(Model.Users)

就像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