Контроллер возвращает содержимое массива, но, на мой взгляд, я получаю только тип? MVC
У меня есть контроллер, который возвращает 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>
2 ответа
@Model.Users
эквивалентно демпингу Model.Users.ToString()
на вид. Для вашего конкретного использования вам нужно представить его в виде массива JavaScript. Строковый массив A C# не знает, как это сделать. Что-то вроде:
var tags = [ @( string.Join("," Model.Users.Select(s => "'" + s + "'").ToArray()) ) ];
Хотя, вероятно, лучше сделать это из ViewModel и просто Model.UsersAsJavaScriptArray
или что-то типа того. Если бы я делал это часто, я бы, вероятно, создал метод расширения для HtmlHelper и сделал бы @Html.AsJavaScriptArray(Model.Users)
Как сказал Мэтт, когда вы пытаетесь вывести что-либо, используя <% =%> или @, оно просто собирается.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