Tôi có thể sử dụng Danh sách hay gì đó không?Làm cách nào để chuyển danh sách các số nguyên đến một hành động MVC?
Trả lời
Scott Hanselman có một hướng dẫn tuyệt vời để làm điều này here.
Phil Haack có phiên bản cập nhật, với dự án tải xuống. http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx –
Chỉ cần các loại quyền của bộ sưu tập. Chính xác loại phụ thuộc vào phiên bản:
MVC1: public ActionResult DoSomething(int[] input)
MVC2: public ActionResult DoSomething(IList<int> input)
Bạn có thể chuyển một 'Danh sách
[ArrayOrListParameterAttribute("ids", ",")]
public ActionResult Index(List<string> ids)
{
}
Không có thuộc tính như vậy. Không phải trong .NET, và googled và không tìm thấy mã nguồn ở bất cứ đâu. – AaronLS
Bạn cần phải vượt qua chúng để hành động của bạn bằng cách thêm mỗi số nguyên để POST hoặc GET chuỗi truy vấn như sau:
myints=1&myints=4&myints=6
sau đó, trong hành động của bạn, bạn sẽ có những hành động sau đây
public ActionResult Blah(List<int> myints)
MVC sau đó sẽ điền danh sách với 1,4 và 6
Một điều cần lưu ý. Chuỗi truy vấn của bạn KHÔNG THỂ có dấu ngoặc trong đó. Đôi khi khi danh sách javascript được tạo thành chuỗi truy vấn của bạn sẽ trông giống như sau:
myints[]=1&myints[]=4&myints[]=6
Điều này sẽ làm cho danh sách của bạn rỗng (hoặc có số không). Các dấu ngoặc không được ở đó cho MVC để ràng buộc mô hình của bạn một cách chính xác.
Nếu bạn đang cố gắng để gửi danh sách từ một số hạng mục giao diện (như, một bảng), bạn chỉ có thể thiết lập thuộc tính tên của họ trong HTML để: CollectionName [Index] ví dụ:
<input id="IntList_0_" name="IntList[0]" type="text" value="1" />
<input id="IntList_1_" name="IntList[1]" type="text" value="2" />
và
public ActionResult DoSomething(List<int> IntList) {
}
tham số IntList wil nhận được một danh sách có chứa 1 và 2 theo thứ tự mà
Cách sử dụng:
[ArrayOrListParameterAttribute("ids", ",")]
public ActionResult Index(List<string> ids)
{
}
Ở đây mã cho ArrayOrListParameterAttribute
using System;
using System.Web.Mvc;
using System.Reflection;
using System.Collections;
using System.Collections.Generic;
namespace MvcApplication1
{
public class ArrayOrListParameterAttribute : ActionFilterAttribute
{
#region Properties
/// <summary>
/// Gets or sets the name of the list or array parameter.
/// </summary>
/// <value>The name of the list or array parameter.</value>
private string ListOrArrayParameterName { get; set; }
/// <summary>
/// Gets or sets the separator.
/// </summary>
/// <value>The separator.</value>
private string Separator { get; set; }
#endregion
#region Constructors
/// <summary>
/// Initializes a new instance of the <see cref="ArrayOrListParameterAttribute"/> class.
/// </summary>
/// <param name="listOrArrayParameterName">Name of the list or array parameter.</param>
public ArrayOrListParameterAttribute(string listOrArrayParameterName) : this(listOrArrayParameterName, ",")
{
}
/// <summary>
/// Initializes a new instance of the <see cref="ArrayOrListParameterAttribute"/> class.
/// </summary>
/// <param name="listOrArrayParameterName">Name of the list or array parameter.</param>
/// <param name="separator">The separator.</param>
public ArrayOrListParameterAttribute(string listOrArrayParameterName, string separator)
{
ListOrArrayParameterName = listOrArrayParameterName;
Separator = separator;
}
#endregion
#region Public Methods
/// <summary>
/// Called when [action executing].
/// </summary>
/// <param name="filterContext">The filter context.</param>
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string separatedValues = filterContext.RouteData.GetRequiredString(ListOrArrayParameterName);
ParameterInfo[] parameters = filterContext.ActionMethod.GetParameters();
ParameterInfo searchedParameter = Array.Find(parameters, parameter => parameter.Name == ListOrArrayParameterName);
if (searchedParameter == null)
throw new InvalidOperationException(string.Format("Could not find Parameter '{0}' in action method '{1}'", ListOrArrayParameterName, filterContext.ActionMethod.Name));
Type arrayOrGenericListType = searchedParameter.ParameterType;
if (!IsTypeArrayOrIList(arrayOrGenericListType))
throw new ArgumentException("arrayOrIListType is not an array or a type implementing Ilist or IList<>: " + arrayOrGenericListType);
filterContext.ActionParameters[ListOrArrayParameterName] = GetArrayOrGenericListInstance(arrayOrGenericListType, separatedValues, Separator);
base.OnActionExecuting(filterContext);
}
#endregion
#region Non Public Methods
private static bool IsTypeArrayOrIList(Type type)
{
if (type.IsArray)
return true;
return (Array.Exists(type.GetInterfaces(), x => x == typeof(IList) || x == typeof(IList<>)));
}
private static object GetArrayOrGenericListInstance(Type arrayOrIListType, string separatedValues, string separator)
{
if (separatedValues == null)
return null;
if (separator == null)
throw new ArgumentNullException("separator");
if (arrayOrIListType.IsArray)
{
Type arrayElementType = arrayOrIListType.GetElementType();
ArrayList valueList = GetValueList(separatedValues, separator, arrayElementType);
return valueList.ToArray(arrayElementType);
}
Type listElementType = GetListElementType(arrayOrIListType);
if (listElementType != null)
return GetGenericIListInstance(arrayOrIListType, GetValueList(separatedValues, separator, listElementType));
throw new InvalidOperationException("The type could not be handled, this should never happen: " + arrayOrIListType);
}
private static Type GetListElementType(Type genericListType)
{
Type listElementType = null;
foreach (Type type in genericListType.GetInterfaces())
{
if (type.IsGenericType && type == typeof(IList<>).MakeGenericType(type.GetGenericArguments()[0]))
{
listElementType = type.GetGenericArguments()[0];
break;
}
}
return listElementType;
}
private static object GetGenericIListInstance(Type arrayOrIListType, ArrayList valueList)
{
object result = Activator.CreateInstance(arrayOrIListType);
const BindingFlags flags = BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public;
foreach (object value in valueList)
{
arrayOrIListType.InvokeMember("Add", flags, null, result, new[] { value });
}
return result;
}
private static ArrayList GetValueList(string separatedValues, string separator, Type memberType)
{
string[] values = separatedValues.Split(new[] { separator }, StringSplitOptions.RemoveEmptyEntries);
ArrayList valueList = new ArrayList();
foreach (string value in values)
{
valueList.Add(Convert.ChangeType(value, memberType));
}
return valueList;
}
#endregion
}
}
- 1. Làm cách nào để chuyển danh sách các số nguyên đến một hành động MVC?
- 2. Chuyển đổi danh sách các danh sách thành danh sách các số nguyên
- 3. Làm cách nào để chuyển đổi chuỗi thành danh sách các số nguyên trong Haskell
- 4. Làm cách nào để chuyển hướng đến hành động trước đó trong ASP.NET MVC?
- 5. Làm thế nào để chuyển đổi chuỗi số thành số nguyên trong một danh sách?
- 6. chuyển đổi danh sách chuỗi thành danh sách số nguyên
- 7. Chuyển hướng đến một hành động từ global.asax - mvc
- 8. Làm cách nào để chuyển danh sách dưới dạng danh sách các đối số trong vợt?
- 9. ASP.NET MVC 3 - chuyển hướng đến một hành động khác
- 10. Chuyển đổi danh sách một mục thành số nguyên
- 11. Làm cách nào để chuyển trực tiếp đến nút gửi đến một hành động khác
- 12. Cách dễ nhất để chuyển đổi danh sách các chuỗi byte hex thành danh sách các số nguyên hex?
- 13. Zend: Chuyển hướng đến hành động với các tham số
- 14. Chuyển đổi số thành danh sách số nguyên
- 15. ASP.NET MVC - làm cách nào để có được đường dẫn đầy đủ đến một hành động
- 16. Làm thế nào để tôi remap một tham số hành động MVC đến tên tham số khác?
- 17. Cách an toàn để chuyển thông số ngày tháng cho cuộc gọi ajax đến một hành động MVC
- 18. Lặp qua danh sách các hành động
- 19. chuyển đổi số nguyên thành danh sách trong python
- 20. Làm cách nào để có danh sách các hành động có sẵn cho bộ điều khiển?
- 21. Làm thế nào để chuyển đổi một chuỗi số clojure thành các số nguyên riêng biệt?
- 22. Làm thế nào để chuyển hướng đến một hành động điều khiển từ một phương thức JSONResult trong ASP.NET MVC?
- 23. Chuyển đổi danh sách số nguyên thành int mảng
- 24. Làm thế nào để chuyển một Danh sách nguyên thủy với Jersey + JAXB + JSON
- 25. biến SQL để giữ danh sách các số nguyên
- 26. Chuyển đổi Danh sách Int thành Số nguyên
- 27. Bộ lọc hành động MVC bằng cách sử dụng các thông số được chuyển đến cho ActionResult?
- 28. Python Tham gia một danh sách các số nguyên
- 29. LINQ: Làm cách nào để nối một danh sách các số nguyên vào chuỗi phân cách bằng dấu phẩy?
- 30. tìm thấy nếu một số nguyên tồn tại trong một danh sách các số nguyên
How are you có ý định để vượt qua danh sách? từ một cuộc gọi của khách hàng (javascript) hoặc từ một trang xem? – MilkyWayJoe
+1 cho câu hỏi ngắn nhất mà tôi đã xem trên trang web này. :) – Kye