私は非常に混乱している大きな問題を抱えています。最初に少し背景を説明します。私は2つのモデルを持っています.1つは他のようなものを含んでいます
public class AccountViewModel
{
public ChargeViewModel chargeViewModel { get; set; }
other public values
}
これで、部分ビューをそのように参照するビューができました。
@model MyModels.AccountViewModel
[[Block_Header]]
@{ Html.RenderPartial("Header"); }
[[/Block_Header]]
[[ValidationSummary]]
@Html.ValidationSummary(false)
[[/ValidationSummary]]
[[Block_ReloadOptions]]
<div data-role="fieldcontain">
<fieldset data-role="controlgroup" data-type="horizontal" class="amount-bar">
<legend>Select an amount</legend>
@{
List<int> PresetValues = Main.Denominations.Split(',').Select(x => Convert.ToInt32(x.Trim())).ToList();
}
@if (PresetValues.Count > 0){
int i = 1;
foreach (int value in PresetValues) {
<input type="radio" name="amount" id="amount@(i)" value="@value" @(Model.chargeViewModel.ChargeAmount == value ? "checked" : "")>
<label for="amount@(i)">$@value</label>
i++;
}
}
<label for="select-amount">Select Amount</label>
<select name="select-amount" id="select-amount" class="select-amount" data-role="select">
<option value="">Other</option>
@if (Model.chargeViewModel.OtherValues.Count > 0){
foreach (int value in Model.chargeViewModel.OtherValues)
{
<option value="@value" @(Model.chargeViewModel.ChargeAmount == value ? "selected" : "") >$@value</option>
}
}
</select>
@Html.HiddenFor(m => m.chargeViewModel.ChargeAmount, new { id="hiddenAmount", value="0" })
</fieldset>
</div>
関連性のないいくつかのフォームがここにあり、次のように下部に私の部分的なビューがあります
@Html.Partial("MobileModelView", Model.chargeViewModel)
今、私の部分的なビューは次のようになります
@model VirtualNext.Web.Models.ChargeViewModel
<div class="ui-block-a">
<fieldset data-role="controlgroup" data-type="horizontal" class="field-margin validate expiry-select">
<label for="select-expiry-month" class="ui-hidden-accessible">Month</label>
@Html.DropDownListFor(m => m.ExpMonth, Model.ddlMonths, new { id = "select-expiry-month", @class= "validate"})
<label for="select-expiry-year" class="ui-hidden-accessible">Year</label>
@Html.DropDownListFor(m => m.ExpYear, Model.ddlYears, new { id = "select-expiry-year", @class= "validate validateExpiry validateYear" })
</fieldset>
</div>
そのため、コントローラーのモデルに m.ExpMonth と m.ExpYear の値を渡す際に問題が発生しています。Request.Form の値を確認しましたが、値が入力されていますが、コントローラーの post メソッドには入力されていません。
私のコントローラーは次のようになります
public ActionResult MyAction(AccountViewModel model, ChargeViewModel chargeViewModel)
{}
これで、メイン ビューを介して直接渡したすべてのデータが得られましたが、部分ビューからは、希望どおりにモデルにデータが入力されていません。現在、これは私が取り組んでいるモバイル サイトの一部であり、実際にデスクトップ側でも非常によく似たものを持っているので、なぜ機能しないのか本当に混乱しています。どんなアイデア/提案も大歓迎です。