0

我有一个返回 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>
4

2 回答 2

1

就像马特说的那样,当您尝试使用 <%= %> 或 @ 输出某些内容时,它只会转到 .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 回答
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 回答