如果您有任何人可以提供一些幫助或建議嗎? 我有一個MVC表單(它實際上是一個Umbraco表單/表面控制器,但我不知道這對此有什麼影響),其模型包含用於使用HTML幫助程序生成複選框的對象列表方法;請參閱以下文章,瞭解如何渲染這些內容並將其接收到我的子操作中:https://stackoverflow.com/a/20687405/1285676並非所有MVC表單中的值都發布
除了儘管所有複選框都在提交時發佈,但並非所有複選框都被拾取,所有似乎都運行良好在我的控制器中由ActionResult方法接收的模型。我使用chrome中的網絡工具查看了發佈的數據,並且所有內容似乎都正常。(所有複選框似乎都以相同的格式發佈),因此,百萬美元的問題是,可以預防哪些問題從模型中拾取一些值?
這裏是我的形式呈現的複選框一個snipet,削減爲剩下的應該是不相關的(是的,有在真實的東西提交按鈕..):
@model MemberPreferencesVM
@using (Html.BeginUmbracoForm<MemberAccountSurfaceController>("HandleDealerMemberPreferencesAccountUpdate", FormMethod.Post, new { @class = "", @id = "dealer-member-account-preferences-form" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@for (var j = 0; j < Model.Brands.Count; j++)
{
if (Model.Brands[j].Division == Model.Divisions[i].Id.ToString())
{
var divisionSelected = Model.Divisions.Any(x => x.Id.ToString() == Model.Brands[j].Division) ? Model.Divisions.FirstOrDefault(x => x.Id.ToString() == Model.Brands[j].Division).Checked : false;
var checkboxAttr = new Dictionary<string, object> { { "class", "styled" }, { "data-division", Model.Brands[j].Division } };
var brandSelected = Model.Brands[j].Checked;
<div class="col-xs-4">
<label class="option @if (divisionSelected && brandSelected){<text>active</text>}">
<img src="@(Model.Brands[j].LogoUrl)" class="center-block" alt="@(Model.Brands[j].Name)" />
<span class="checkbox">
@Html.HiddenFor(model => model.Brands[j].Id)
@Html.HiddenFor(model => model.Brands[j].Name)
@Html.CheckBoxFor(model => model.Brands[j].Checked, checkboxAttr)
</span>
</label>
</div>
}
}
}
略有減少該模型的版本:
public class MemberPreferencesVM: IValidatableObject
{
public MemberPreferencesVM()
{
init();
}
private void init()
{
Divisions = [Logic to fetch divisions];
Brands = [Logic to fetch brands];
}
public IList<DivisionVM> Divisions { get; set; }
public IList<BrandVM> Brands { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var pDivisions = new[] { "Divisions" };
var pBrands = new[] { "Brands" };
if (!Divisions.Any(x => x.Checked))
{
yield return new ValidationResult("Select at least 1 division to view by default", pDivisions);
}
if (!Brands.Any(x => x.Checked))
{
yield return new ValidationResult("Select at least 1 brand to view by default", pBrands);
}
}
}
BrandVM:
public class BrandVM
{
public int Id { get; set; }
public string Name { get; set; }
public string LogoUrl { get; set; }
public bool Checked { get; set; }
public string Division { get; set; }
}
的的ActionResult:
[ValidateAntiForgeryToken]
[ValidateInput(true)]
[HttpPost]
public ActionResult HandleDealerMemberPreferencesAccountUpdate(MemberPreferencesVM model)
{
//logic removed as model doesn't arrive will all values so not relevant
return CurrentUmbracoPage();
}
模型應該包含24個品牌,它永遠只能在似乎「HandleDealerMemberPreferencesAccountUpdate」與12
任何幫助表示讚賞到達(我希望它是簡單的東西,我已經溜了)..
馬克
您必須爲不屬於表單用戶界面的值添加隱藏字段,並且要提交它們。 –
唉,我已經嘗試過了,但沒有什麼區別...... 24中的12個通過了。它們似乎無所謂,如果他們被檢查與否,12通過的是各種品牌的混合各個部門。 –
我想還有其他的東西在你告訴我們的之外。是否有任何複選框通過JavaScript被禁用?當然,當你瀏覽發佈的數據時,他們不會出現。數據中的所有數據都顯示在開發工具中? – krillgar