Javascript 控制器返回数组的内容,但在我看来,我只得到类型?MVC
我有一个返回viewModel的控制器 该viewModel有一个名为Users的属性,它是系统中当前拥有帐户的所有用户名的数组。这用于jquery标记插件 Users属性正确地向视图发送数组 但是当我在视图中使用Javascript 控制器返回数组的内容,但在我看来,我只得到类型?MVC,javascript,asp.net-mvc,razor,viewmodel,tag-it,Javascript,Asp.net Mvc,Razor,Viewmodel,Tag It,我有一个返回viewModel的控制器 该viewModel有一个名为Users的属性,它是系统中当前拥有帐户的所有用户名的数组。这用于jquery标记插件 Users属性正确地向视图发送数组 但是当我在视图中使用@Model.Users时,我只得到了ie类型系统字符串[] 我猜这是一个简单得可笑的问题 控制器 public virtual ActionResult Create(int id) { var viewModel = new AttendeeViewMod
@Model.Users
时,我只得到了ie类型<代码>系统字符串[]
我猜这是一个简单得可笑的问题
控制器
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;
}
}
公共类参与者视图模型
{
公共int AttendeeId{get;set;}
公共字符串名称{get;set;}
public int MeetingID{get;set;}
公共字符串[]用户{get;set;}
公共列表GetMembershipUserList()
{
列表用户名=新列表();
foreach(Membership.GetAllUsers()中的MembershipUser用户)
{
userNames.Add(user.UserName);
}
返回用户名;
}
}
查看使用情况
<script type="text/javascript">
var tags = @Model.Users
$(document).ready(function () { $("#mytags").tagit({ availableTags: tags }); });
</script>
var tags=@Model.Users
$(document.ready(function(){$(“#mytags”).tagit({availableTags:tags});});
@Model.Users
相当于将Model.Users.ToString()
转储到视图中。对于特定用途,需要将其呈现为JavaScript数组。C#字符串数组不知道如何执行此操作。比如:
var tags = [ @( string.Join("," Model.Users.Select(s => "'" + s + "'").ToArray()) ) ];
虽然从ViewModel执行此操作可能更好,只需使用
Model.UsersAsJavaScriptArray
或类似的东西。如果我经常这样做,我可能会为HtmlHelper创建一个扩展方法,并像Matt在尝试使用或@it's to.ToString()输出内容时所说的那样执行@Html.AsJavaScriptArray(Model.Users)
相反,你可以试试
ViewModel.UsersJson = new JavascriptSerializer().Serialize(data.ToArray());
甚至只是序列化你需要的东西
ViewModel.UsersJson = new JavascriptSerializer().Serialize(data.ToArray().Select(u => new { Username = u.Username, FirstName = u.FirstName });
关于最后一点,你在网上的任何地方都发现过吗?我不懒惰,只是时间太差了!序列化的结果是“[“DennisLeary”、“BobSaget”、“BillHicks”]”;如何让JavascriptSerializer转义引号?
var tags = @Model.UsersJson