Asp.net mvc 在按钮submit上获取IActionResult内的空列表-razor页面部分视图
我正在尝试将ID列表传递给按钮Asp.net mvc 在按钮submit上获取IActionResult内的空列表-razor页面部分视图,asp.net-mvc,asp.net-core,razor-pages,Asp.net Mvc,Asp.net Core,Razor Pages,我正在尝试将ID列表传递给按钮submit上的IActionResult。ID来自下拉列表选择。我的视图是获取模型对象的局部视图问题是,当我提交时,列表总是空的。 我已经读到我们不能将列表传递给控制器!那么可能的方法是什么,我真的被困在这一天了 我只粘贴了我认为需要显示的部分代码, 如果您想查看其他代码,请告诉我 View.cshtml <form method="post" asp-page-handler="UpdateComponent"
submit
上的IActionResult
。ID来自下拉列表选择。我的视图是获取模型对象的局部视图问题是,当我提交时,列表总是空的。
我已经读到我们不能将列表传递给控制器!那么可能的方法是什么,我真的被困在这一天了
我只粘贴了我认为需要显示的部分代码,
如果您想查看其他代码,请告诉我
View.cshtml
<form method="post" asp-page-handler="UpdateComponent">
.
.
.
@{
var value1 = 0;
var value2 = 0;
var value3 =0;
}
<!-- asp-items="New plant SelectList"-->
<select class="form-control Shoplist News-plant-select_1 mt-2" data-search="true" asp-for="@value1">
<option value="">Bitte auswählen</option>
</select>
<br />
<!-- asp-items="New plant SelectList"-->
<select class="form-control Shoplist News-plant-select_2 mt-2" data-search="true" asp-for="@value2">
<option value="">Bitte auswählen</option>
</select>
<br />
<!-- asp-items="New plant SelectList"-->
<select class="form-control Shoplist News-plant-select_3 mt-2" data-search="true" asp-for="@value3">
<option value="">Bitte auswählen</option>
</select>
@{
Model.newsletterSubComponents.Add(new Models.NewsletterSubComponents() { NewPlantArticleId = value1 });
Model.newsletterSubComponents.Add(new Models.NewsletterSubComponents() { NewPlantArticleId = value2 });
Model.newsletterSubComponents.Add(new Models.NewsletterSubComponents() { NewPlantArticleId = value3 });
}
<input type="hidden" name="value1" value="@Model.newsletterSubComponents" asp-for="@Model.newsletterSubComponents"/>
.
.
.
<input type="submit" value="Speichern" class="btn btn-primary" />
</form>
.
.
.
@{
var值1=0;
var值2=0;
var值3=0;
}
奥斯瓦伦比特酒店
奥斯瓦伦比特酒店
奥斯瓦伦比特酒店
@{
Model.newslettesubcomponents.Add(newmodels.newslettesubcomponents(){NewPlantArticleId=value1});
Model.newslettesubcomponents.Add(newmodels.newslettesubcomponents(){NewPlantArticleId=value2});
Model.newslettesubcomponents.Add(newmodels.newslettesubcomponents(){NewPlantArticleId=value3});
}
.
.
.
控制器
public IActionResult OnPostUpdateComponent(NewsletterComponents component, int? newsId, int? shortArticleId,
List<NewsletterSubComponents> newsletterSubComponents, int? test)
{
^
|
list empty
.
.
.
}
public IActionResult onpositionpdatecomponent(时事通讯组件组件、int?newsId、int?shortArticleId、,
列出子组件(int?测试)
{
^
|
列表为空
.
.
.
}
我使用ajax填充下拉列表
$.ajax(settings).done(function (data) {
$.each(data, function (index, element) {
$('.News-plant-select_1').append($("<option>").val(element.Id).text(element.NameGerman));
console.log(element.NameGerman);
$('.News-plant-select_2').append($("<option>").val(element.Id).text(element.NameGerman));
console.log(element.NameGerman);
});;
//remove spinner
$('.News-plant-select').removeClass("spinner-border");
});
$.ajax(设置).done(函数(数据){
$.each(数据、函数(索引、元素){
$('.News-plant-select_1')。追加($(“”).val(element.Id).text(element.NameGerman));
console.log(element.NameGerman);
$('.News-plant-select_2')。追加($(“”).val(element.Id).text(element.NameGerman));
console.log(element.NameGerman);
});;
//拆下旋转器
$('.News plant select').removeClass(“微调器边框”);
});
如果您想要接收ID,我认为您可以使用List来接收它,同时保持参数名称与select元素中的名称相同。我根据您的代码制作了一个示例:
<form method="post" asp-page-handler="UpdateComponent">
@{
List<NewsletterSubComponents> newsletterSubComponents = new List<NewsletterSubComponents>
{
new NewsletterSubComponents{ NewPlantArticleId = 1, NewPlantArticleName = "AAA"},
new NewsletterSubComponents{ NewPlantArticleId = 2, NewPlantArticleName = "BBB"},
new NewsletterSubComponents{ NewPlantArticleId = 3, NewPlantArticleName = "CCC"}
};
var selectList = new SelectList(newsletterSubComponents, "NewPlantArticleId", "NewPlantArticleName");
}
<!-- asp-items="New plant SelectList"-->
<select name="newsletterSubComponentIds" class="form-control Shoplist News-plant-select_1 mt-2" data-search="true" asp-items="@selectList" >
<option value="">Bitte auswählen</option>
</select>
<br />
<!-- asp-items="New plant SelectList"-->
<select name="newsletterSubComponentIds" class="form-control Shoplist News-plant-select_2 mt-2" data-search="true" asp-items="@selectList">
<option value="">Bitte auswählen</option>
</select>
<br />
<!-- asp-items="New plant SelectList"-->
<select name="newsletterSubComponentIds" class="form-control Shoplist News-plant-select_3 mt-2" data-search="true" asp-items="@selectList">
<option value="">Bitte auswählen</option>
</select>
<input type="submit" value="Speichern" class="btn btn-primary" />
</form>
@{
列表子组件=新列表
{
新时事通讯子组件{NewPlantArticleId=1,NewPlantArticleName=“AAA”},
新时事通讯子组件{NewPlantArticleId=2,NewPlantArticleName=“BBB”},
新时事通讯子组件{NewPlantArticleId=3,NewPlantArticleName=“CCC”}
};
var selectList=new selectList(时事通讯子组件,“NewPlantArticleId”、“NewPlantArticleName”);
}
奥斯瓦伦比特酒店
奥斯瓦伦比特酒店
奥斯瓦伦比特酒店
结果:
谢谢@mj1313的回答,非常感谢您抽出时间。不过有件小事。我的列表实际上来自javascript。我已经用javascript快照更新了我的代码。在我的例子中,这三个下拉列表是使用javascript填充的。然后我想要的是将选定的int值存储到一个大小为3的列表中,并将它们传递给控制器。使用javascript没有区别,因为它们在呈现为html后是相同的。您只需要向select元素添加name属性,因为模型绑定是基于名称的。