2011-09-16 32 views
10

Tôi không thể tìm ra lý do tại sao nó không hoạt động. Tôi đang sử dụng ASP.NET MVC2 và tôi chỉ đơn giản là cố gắng để ghi đè lên sự xuất hiện soạn thảo mặc định bằng cách đặt mã này vào /Shared/EditorTemplates/String.ascx:EditorFor - Mục mẫu được chuyển vào từ điển là loại 'System.Int32', nhưng từ điển này yêu cầu một mục kiểu của 'System.String'

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<string>" %> 
<%=Html.TextBox(null, Model, new { @class="Text" }) %> 

Sau đó, trong trang Xem của tôi, tôi có điều này dòng đó là kiểu Int32:

<%: Html.EditorFor(model => model.AppID) %> 

Đối với một số lý do, kết quả này trong các lỗi:

System.InvalidOperationException: The model item passed into the dictionary is of type 'System.Int32', but this dictionary requires a model item of type 'System.String'. 

tôi không thấy bất cứ điều gì như thế nào có thể là sai về kết thúc của tôi, nó khá đơn giản. Tại sao nó cố gắng sử dụng trình soạn thảo cho một chuỗi nếu kiểu là Int32? Tôi cũng nên đề cập đến rằng tôi đã ghi đè các biên tập viên cho một bool? gõ (để hiển thị các giá trị boolean dưới dạng hộp kiểm) và nó hoạt động tốt trên cùng một trang.

EDIT

Vâng, tôi đã tìm kiếm nhiều lần, nhưng tôi không thấy bài này cho đến khi tôi tìm thấy nó trong các liên kết "có liên quan". Tôi cho rằng điều này sẽ làm việc, tôi vẫn nghĩ đó là một việc thực hiện khó hiểu và mâu thuẫn mặc dù:

Asp.net Mvc Display template of String, but now every simple type wants to use it!

Trả lời

1

Trong mẫu soạn thảo của bạn bạn đã nói với nó để mong đợi một ViewUserControl<string> nhưng bạn đang đi qua một int để EditorFor của bạn.

Vì mẫu trình chỉnh sửa đang đợi string và bạn đang chuyển vào một số int, nó sẽ không hoạt động.

+0

Ok, tôi đoán đó là phần khó hiểu đối với tôi. Tôi nghĩ nó đã sử dụng sự phản chiếu để chọn đúng mẫu trình soạn thảo. đây không phải là trường hợp à? Như tôi đã nói, tôi có bool? mẫu và nó biểu diễn các giá trị boolean một cách chính xác - nó không gọi mẫu chuỗi. – user949286

+0

Bạn có mẫu int riêng biệt không? –

+0

Không, tôi không biết. Tôi sẽ không nghĩ rằng tôi sẽ cần một, bởi vì tôi lần đầu tiên tạo ra các bool? mẫu và mọi thứ tiếp tục hoạt động. Sau đó, tôi tạo ra các mẫu chuỗi và lỗi này xảy ra. Có lẽ tôi nên chỉ cần tạo mẫu int, nhưng tôi có thể có nhiều loại khác và tôi muốn nó sử dụng mẫu mặc định cho những người vì vậy tôi không phải tạo mẫu không cần thiết dư thừa. – user949286

1

Tôi vừa gặp phải lỗi này, nhưng với một DateTime. Tôi đã có thể làm cho mọi thứ quay trở lại bằng cách thay đổi mẫu trình chỉnh sửa để sử dụng Object làm kiểu mô hình của nó.

5

trong Lưới ui kendo làm:

public class BookBean 
    { 
     [ScaffoldColumn(false)] 
     public Int32 Id { set; get; } 

     public String Title { set; get; } 

     public String Author { set; get; } 

     public String Publisher { set; get; } 

     [UIHint("Integer")] 
     public Int32 Price { set; get; } 

     [UIHint("Integer")] 
     public Int32 Instore { set; get; } 

     [UIHint("Integer")] 
     public Int32 GroupId { get; set; } 
    } 

trong Integer.ascx trong thư mục Shared/EditorTemplate làm:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<int?>" %> 

<%: Html.Kendo().IntegerTextBoxFor(m => m) 
     .HtmlAttributes(new { style = "width:100%" }) 
     .Min(int.MinValue) 
     .Max(int.MaxValue) 
%> 
0

tôi phải đối mặt với cùng một vấn đề với lĩnh vực Int16 mặc dù tôi có Integer mẫu trong dự án, vì vậy tôi phải tạo một mẫu cụ thể cho Int16 Tên tệp: Int16.cshtml Html:

@model Int16? 

@Html.TextBoxFor(model => model) 
Các vấn đề liên quan