2012-02-22 34 views
12

Tôi có bên sau của quan điểm của tôiMVC Razor cần phải nhận được chuỗi

 @Html.DisplayFor(modelItem => item.FirstName) 

tôi cần phải nhận được ban đầu đầu tiên của First Name.

tôi đã cố gắng

@Html.DisplayFor(modelItem => item.FirstName).Substring(1,1) 

nhưng nó dường như không làm việc. Tôi nhận được lỗi sau: .. 'System.Web.Mvc.MvcHtmlString' không chứa định nghĩa cho 'Chuỗi con' và không có phần mở rộng

+0

Tôi thực sự ngạc nhiên nếu bạn muốn 'Chuỗi con (1,1)' thay vì 'Chuỗi con (0,1)'. – tvanfosson

Trả lời

-9

Nếu bạn chỉ muốn hiển thị ký tự đầu tiên của item.FirstName tại sao không làm:

@Html.DisplayFor(modelItem => item.FirstName.Substring(1,1)) 

Bạn có mặt sai của khung đóng.

+5

Điều này sẽ không hoạt động. Bạn sẽ nhận được một 'InvalidOperationException' vì các lời gọi phương thức không được hỗ trợ trong các biểu thức lambda được sử dụng bởi các trình trợ giúp html. –

7

Bạn nên đặt một thuộc tính trên ViewModel của mình cho điều đó thay vì cố gắng đưa nó vào mã xem. Trách nhiệm chỉ xem là hiển thị những gì được đưa ra bởi mô hình, nó không nên tạo dữ liệu mới từ mô hình.

5

Tôi có thể đề xuất chế độ xem không phải là nơi thích hợp để thực hiện việc này. Bạn có lẽ nên có một thuộc tính mô hình riêng biệt, FirstInitial, có chứa logic. Quan điểm của bạn chỉ đơn giản là hiển thị này.

public class Person 
    { 
     public string FirstName { get; set; } 

     public string FirstInitial 
     { 
      get { return FirstName != null ? FirstName.Substring(0,1) : ""; } 
     } 

     ... 
    } 


    @Html.DisplayFor(modelItem => modelItem.FirstInitial) 
22

Bạn có thể thực hiện theo quan điểm như sau:

@Html.DisplayFor(modelItem => modelItem.FirstName).ToString().Substring(0,5) 
+1

Điều này làm việc rất tốt cho tôi, cảm ơn tất cả! – ShaunOReilly

+0

Làm việc như một sự quyến rũ. – MuniR

1

Bạn có thể sử dụng một phương pháp mở rộng thông thường như hình dưới đây:

/// <summary> 
/// Returns only the first n characters of a String. 
/// </summary> 
/// <param name="str"></param> 
/// <param name="start"></param> 
/// <param name="maxLength"></param> 
/// <returns></returns> 
public static string TruncateString(this string str, int start, int maxLength) 
{   
    return str.Substring(start, Math.Min(str.Length, maxLength)); 
} 

Hope this helps ...

-1

Điều này phù hợp với tôi (không có người trợ giúp):

@item.Description.ToString().Substring(0, (item.Description.Length > 10) ? 10 : item.Description.Length) 
Các vấn đề liên quan