2013-01-07 85 views
1

我有這樣的代碼:實現擴展方法

namespace Zinc.Web.Extensions.DataModel.Training 
{ 
    public static class TrainingModuleProgressStateDataModelExtentions 
    { 
     public static string GetHintText(String aString) 
     { 

     //must still make up astring here 
     return aString; 
     } 
    } 
} 

namespace Zinc.DataModels.Training 
{ 
    public class TrainingModuleProgressStateDataModel 
    { 
     public IEnumerable<UserTrainingPointsDataModel> UserTrainingPoints { get; set; } 
    } 
    } 

    public class UserTrainingPointsDataModel 
    { 
    public virtual int InteractionType { get; set; } 
    public virtual int Points { get; set; } 
    public virtual string Name { get; set; } 
    public virtual string IncentiveTrainingModuleOptionName { get; set; } 
    } 
在我的倉庫

我添加到UserTrainingPoints:

string RawPoints = row["RawPoints"].ToString(); 
string[] rawPoints = RawPoints.Split(new char[] { '|' }); 
List<UserTrainingPointsDataModel> points = new List<UserTrainingPointsDataModel>(); 

foreach (var RawPoint in rawPoints) 
{ 
    string[] entry = RawPoint.Split(new char[] { ',' }); 
    var point = new UserTrainingPointsDataModel(); 
    point.Name = entry[0]; 
    point.Points = Convert.ToInt32(entry[1]); 
    point.InteractionType = Convert.ToInt32(entry[2]); 
    point.IncentiveTrainingModuleOptionName = entry[3]; 
    points.Add(point); 

} 
trainingModuleProgressState.UserTrainingPoints = points; 
data.Add(trainingModuleProgressState); 

在我看來,我需要調用其將在UserTrainingPoints值的擴展方法組成一個字符串,然後我將在工具提示中顯示。

我的問題是我如何實現擴展方法,所以我可以在我的視圖中調用它?

我的視圖代碼:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Zinc.Models.Training.TrainingModuleProgressStateDataModelResults>" %> 
<%@ Import namespace="Zinc.Web.Extensions.DataModel.Training" %> //added this 

    <% if (module.HasAssessment) 
    { %> 
    <div class="<%: moduleStateClass %>">&nbsp;</div> 
    <div class="<%: moduleScoreClass %>"><%: module.ModuleScore %>%</div> 
    <% Zinc.Web.Extensions.DataModel.Training.TrainingModuleProgressStateDataModelExtentions.GetHintText(module.UserTrainingPoints); %> //still not correct here 
+0

你向我們展示了不包含任何擴展方法的代碼。你想成爲一種擴展方法的方法是什麼?哪種類型? –

+0

類名建議'TrainingModuleProgressStateDataModelExtentions.GetHintText'應該是一個擴展方法,但它只接受一個字符串作爲其唯一參數。這看起來不正確。嘗試讓它不首先使用擴展方法,然後將其轉換爲擴展方法。 – hvd

回答

4

由於UserTrainingPointsIEnumerable<UserTrainingPointsDataModel>我會想你的擴展方法的簽名應該是

public static string GetHintText(this IEnumerable<UserTrainingPointsDataModel> points) 
{ 
    string aString; 
    //must still make up astring here 
    return aString; 
} 

然後,你可以這樣調用

module.UserTrainingPoints.GetHintText(); 
+0

謝謝,但我應該在module.UserTrainingPoints.GetHintText()中傳遞一些信息並不確定是什麼? –

+0

從技術上講,你正將'module.UserTrainingPoints'傳遞給方法。 – juharr

+0

在視圖中得到一個錯誤,指出Zinc.Models.Training.TrainingModuleProgressStateDataModelResults不包含GetHintText的定義?我有這個在我看來:<%@ using Zinc.Web.Extensions.DataModel.Training%>? –

0

訪問擴展方法做同樣的方式,你通常會做。 但是,您應該注意您使用@using關鍵字引用了擴展名添加到的名稱空間。

+0

謝謝,我應該將這添加到我的視圖嗎? <%@ using Zinc.Web.Extensions.DataModel.Training%> –