提问人:Roger Almirall Jou 提问时间:11/14/2023 最后编辑:Roger Almirall Jou 更新时间:11/14/2023 访问量:22
在 asp.net mvc 上提交复杂模型
Submit complex model on asp.net mvc
问:
我实际上正在尝试将整个页面模型提交到控制器。问题在于,由于模型是相互引用的对象列表,因此形式将是无限的。(至少如果我用传统的html形式做它,我不知道更好)
现在我将进入更多细节。
我在视图上使用的模型如下:
public class MeasureModel
{
public int Id { get; set; }
public TVList? tvList { get; set; }
}
作为 TVList 类:
public class TVList
{
public List<TVStandard> StandardsList;
}
而 TVStandard 类继承自:
public abstract class TVItem
{
public string Name;
public TVItem Parent;
public List<TVItem> Children;
public bool IsSelected = false;
}
然后每个类都继承自这个类:
public class TVStandard : TVItem
{
public string folderName;
}
public class TVSection : TVItem
{
public string scriptName;
}
public class TVMode : TVItem
{}
internal class TVFreq : TVItem
{
public string ID;
}
看到这一点后,在将模型传递给控制器之前,我想从模型中更改的唯一属性是属性。此属性通过树视图中的一系列复选框进行更改。
其余的将保持不变。
在这里你可以看到cshtml代码:IsSelected
<form method="post" action="/Launch/Home/retrieveSelection">
@Html.HiddenFor(model => Model.tvList);
<input type="number" name="Id" value="1234" style="display:none" />
@*MIRAR PERQUE tvList SEMPRE ESTA A NULL ||||| TESTEJAR SI EL QUE FALLA ES LA CHECKBOX A UN PROJECTE APART ||||| PROVAR D'ENVIAR EL MODEL, SENSE CAP FORM*@
<ul>
@foreach (TVStandard tvstandard in Model.tvList.StandardsList) {
int i = 0;
<li>
<input type="hidden" name="tvList.StandardsList[@i].folderName" value="@tvstandard.folderName" />
<input type="hidden" name="tvList.StandardsList[@i].Name" value="@tvstandard.Name" />
<span class="caret"></span>
<input type="checkbox" class="checker" id="@tvstandard.Name" name="tvList.StandardsList[@i].IsSelected" value="true">
<label for="@tvstandard.Name">@tvstandard.Name</label>
<ul class="nested">
@foreach (TVSection tvsection in tvstandard.Children) {
int j = 0;
<li>
@* <input type="hidden" name="tvList.StandardsList[@i].Children[@j].scriptName" value="@tvsection.scriptName" />
<input type="hidden" name="tvList.StandardsList[@i].Children[@j].Name" value="@tvsection.Name" /> *@
<span class="caret"></span>
<input type="checkbox" class="checker" id="@tvsection.Name" name="tvList.StandardsList[@i].Children[@j].IsSelected" value="true">
<label for="@tvsection.Name">@tvsection.Name</label>
<ul class="nested">
@foreach (TVMode tvmode in tvsection.Children) {
int k = 0;
<li>
@* <input type="hidden" name="tvList.StandardsList[@i].Children[@j].Children[@k].Name" value="@tvmode.Name" /> *@
<span class="caret"></span>
<input type="checkbox" class="checker" id="@tvmode.Name" name="tvList.StandardsList[@i].Children[@j].Children[@k].IsSelected" value="true">
<label for="@tvmode.Name">@tvmode.Name</label>
<ul class="nested">
@foreach (TVFreq tvfreq in tvmode.Children) {
int l = 0;
<li>
@* <input type="hidden" name="tvList.StandardsList[@i].Children[@j].Children[@k].Children[@l].ID" value="@tvfreq.ID" />
<input type="hidden" name="tvList.StandardsList[@i].Children[@j].Children[@k].Children[@l].Name" value="@tvfreq.Name" /> *@
<ul class="nested" style="display:block">
<input type="checkbox" class="checker" id="@tvfreq.Name" name="tvList.StandardsList[@i].Children[@j].Children[@k].Children[@l].IsSelected" value="true">
<label for="@tvfreq.Name">@tvfreq.Name</label>
</ul>
</li>
l++;
}
</ul>
</li>
k++;
}
</ul>
</li>
j++;
}
</ul>
</li>
i++;
}
</ul>
<br />
<input type="submit" class="myULclass"/>
</form>
成为模特:@model MeasureModel;
因此,即使我尝试通过经典的 html 表单或 Javascript 提交它,我也无法正确完成。
有谁知道一种可能的方法?
答: 暂无答案
下一个:为什么验证失败时不显示错误消息?
评论
So, evethough I've tried to submit it by a classic html form or Javascript I've not been able to do it right.
我们需要查看您用于构建模型的代码并提交它,以便我们可以帮助您调试它。虽然概述模型本身的代码很有用,但它不是需要调试的部分。