मैं स्टीव सैंडर्सन BeginCollectionItem
एक्सटेंशन का उपयोग कर रहा हूं ताकि वस्तुओं की बाध्यकारी सूचियों में मदद मिल सके। यह आदिम प्रकार के लिए ठीक काम करता है। मेरी समस्या यह है कि मैंने जो कस्टम मॉडल बाइंडर लिखा है, उसके लिए मैं नहीं देख सकता कि आइटम का पूरा नाम और अनुक्रमणिका कैसे उत्पन्न करें, जिसके लिए मैं बाध्यकारी हूं।स्टीव सैंडर्सन्स के साथ मॉडल बाइंडिंग BeginCollectionItem
वर्तमान में अपने मॉडल बांधने की मशीन इस तरह दिखता है:
public class MoneyModelBinder : DefaultModelBinder
{
protected override void OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + ".Amount");
if (valueResult != null)
{
var value = valueResult.AttemptedValue;
var currencyCode = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + ".Iso3LetterCode").AttemptedValue;
var money = (Money) bindingContext.Model;
Money parsedValue;
if (String.IsNullOrEmpty(value))
{
money.Amount = null;
return;
}
var currency = Currency.FromIso3LetterCode(currencyCode);
if (!Money.TryParse(value, currency, out parsedValue))
{
bindingContext.ModelState.AddModelError("Amount", string.Format("Unable to parse {0} as money", value));
}
else
{
money.Amount = parsedValue.Amount;
money.Currency = parsedValue.Currency;
}
}
else
{
base.OnModelUpdated(controllerContext, bindingContext);
}
}
}
मेरे ViewModel इस तरह Lokks (कुछ propertis स्पष्टता के लिए छोड़े गए):
public class EditFeeEarningCapacityViewModel
{
public List<FeeEarner> FeeEarners { get; set; }
public class FeeEarner
{
public Money AverageChargeOutRate { get; set; }
}
}
मेरे टेम्पलेट संपादन मनी प्रकार के लिए इस तरह दिखता है:
@model Core.Money
@{
int decimalPlaces;
if(!int.TryParse(string.Format("{0}", ViewData["DecimalPlaces"]), out decimalPlaces))
{
decimalPlaces = 0;
}
}
<div class="input-prepend">
<span class="add-on">@Model.Currency.Symbol</span>@Html.TextBoxFor(m => m.Amount,
new
{
placeholder = string.Format("{0}", Model.Currency),
@class = "input-mini",
Value = String.Format("{0:n" + decimalPlaces + "}", Model.Amount)
})
</div>
@Html.HiddenFor(x => x.Iso3LetterCode)
एक रूप इस तरह पद मानों के लिए:
FeeEarners.index 3fa91d09-0617-4bea-ae3f-d84862be8c04
FeeEarners[3fa91d09-0617-4bea-ae3f-d84862be8c04].feeEarner.AverageChargeOutRate.Amount 500
FeeEarners[3fa91d09-0617-4bea-ae3f-d84862be8c04].feeEarner.AverageChargeOutRate.Iso3LetterCode GBP
मैं नहीं देख सकता कि आइटम या उस संपत्ति के नाम का पता लगाने के लिए कैसे मैं बाध्यकारी हूं। तो अनिवार्य रूप से, मैं उस आइटम की अनुक्रमणिका कैसे ढूंढूं जिसे मैं बांधने की कोशिश कर रहा हूं और उस संपत्ति का नाम जिसे मैं डेटा से बांधने की कोशिश कर रहा हूं?
@ स्टीवन-सैंडरसन आप के रूप में वह एक सदस्य :) है स्टीव इस को देखने के लिए मिलना चाहिए बनाने – MikeD