いくつかのコードを移行していて、きれいにフォーマットされたルックアップテーブルを持っていますが、後方互換性のために古風構造に変換する必要があります。オプションのアクションとして部分メソッドを提供するにはどうすればいいですか?
私はGetLookupTable()メソッドを持ち、SelectItemListのリストを取得しています。私のモデルやルックアップ呼び出しはすべてコード生成されていますが、返品SelectItemの一部を手作業で変更する必要があります。開発者は望むなら実装することができます。
訪問者は、部分的な方法として行われ、開発者は、彼らができる実装したいが、
以下のように、私はエラーを取得していた場合にエラー132が「メソッドからデリゲートを作成することはできませんInfoChoice.Web.Admin .ViewModels.Product.ProductCreditCardViewModel.LookupTableViewModel.CardTypeVisit(System.Web.Mvc.SelectListItem)」はここで実施宣言
ことなく部分的な方法であるカミソリ
を使用して呼び出し元のコードであるためここは、エラーが正しい選択項目リストデータを返しますストリップダウンモデル
// Generated model
public partial class ProductCreditCardViewModel
{
[Required]
[DisplayName("Account - Card Type")]
[DefaultValue("")]
public string CardType { get; set; }
// ***************************************************************************************************
// Lookup Table calls for this model (Generated)
// ***************************************************************************************************
public partial class LookupTableViewModel : BaseLookupTableViewModel
{
partial void CardTypeVisit(SelectListItem item);
public SelectList CardType
{
get
{
return GetLookupItems("ProductCreditCardCardType", CardTypeVisit);
}
}
}
}
public partial class ProductCreditCardViewModel
{
// Custom Implementation Goes Here
public partial class LookupTableViewModel : BaseLookupTableViewModel
{
//partial void CardTypeVisit(SelectListItem item)
//{
// item.Value = "|" + item.Value + "|";
//}
}
}
ベースルックアップテーブルビューモデル
public class BaseLookupTableViewModel
{
public SelectList GetLookupItems(string lookupName)
{
return GetLookupItems(lookupName, "Name", "Text", null, null);
}
public SelectList GetLookupItems(string lookupName, Action<SelectListItem> itemVisitor)
{
return GetLookupItems(lookupName, "Name", "Text", null, itemVisitor);
}
public SelectList GetLookupItems(string lookupName, string dataValueField, string dataTextField, object selectedValue, Action<SelectListItem> itemVisitor)
{
// Go get some data from DataStore
var list = App.Data.Lookup.GetLookupList(lookupName);
// Convert to IEnumerable<SelectItemList>
var result = new SelectList(list, dataValueField, dataTextField, selectedValue);
// If developer would like to alter that list before it is returned, then developer should implement an item visitor
if (itemVisitor != null)
{
foreach (var item in result)
{
itemVisitor(item);
}
}
return result;
}
public void SampleVisitor(SelectListItem item)
{
item.Value = "Modified: " + item.Value;
}
}
これは私が探しているものと思われます:return GetLookupItems( "ProductCreditCardCardType"、x => CardTypeVisit(x)); –
foreach(結果のvar item) { //この訪問者は次のことを行います:item.Value = "|" + item.Value + "|"; itemVisitor(item); LogUtil.Info(item.Value); } foreach(結果内のvarアイテム) { LogUtil.Info(item.Value); } このコードは結果を更新しません。すなわち、第1ループでは次の(| Visa |、| Mastercard |、| AMEX |)を取得しますが、2番目のループでは(Visa、Mastercard、AMEX)を取得します。私はアイテムが参照型であり、SelectItemListに対して更新すると思っていただろうが、それはコピーのようだ。 –