#c# #asp.net-mvc #asp.net-core #razor-pages
#c# #asp.net-mvc #asp.net-core #razor-страницы
Вопрос:
Почему список newsletterSubComponents
не передается IActionResult
. Кто-нибудь может помочь, пожалуйста. Я знаю, что есть один вариант BindProperty
, но я не могу его использовать, так как этот список исходит из частичного представления. Я могу изменить только список, который находится внутри модели, которая передается в partial_view.
Список в модели
List<NewsletterSubComponents> newsletterSubComponents = {get; set;}
Частичный просмотр
@{
Model.newsletterSubComponents.Add(new Models.NewsletterSubComponents() { NewPlantArticleId = 0 });
Model.newsletterSubComponents.Add(new Models.NewsletterSubComponents() { NewPlantArticleId = 2 });
}
@for (var i = 0; i < Model.newsletterSubComponents.Count; i)
{
<select class="form-control Shoplist News-plant-select_1 mt-2" data-search="true" asp-for="@Model.newsletterSubComponents[i].NewPlantArticleId">
<option value="0">Bitte auswählen</option>
</select>
}
Контроллер
public IActionResult OnPostUpdateComponent(NewsletterComponents component, int? newsId, int? shortArticleId,
List<NewsletterSubComponents> newsletterSubComponents, int? newPlant1, int? newPlant2, int? newPlant3)
{
var dbComponent = _context.NewsletterComponents.Find(component.NewsletterComponentId);
if (dbComponent == null)
{
return RedirectToPage("./Index");
}
dbComponent.NewsId = newsId;
dbComponent.ShortArticleId = shortArticleId;
dbComponent.newsletterSubComponents = component.newsletterSubComponents;
dbComponent.NewsletterMoreLink = component.NewsletterMoreLink;
dbComponent.CustomLinkText = component.CustomLinkText;
dbComponent.NewsleterComponentText = component.NewsleterComponentText;
dbComponent.NewsletterComponentHeadline = component.NewsletterComponentHeadline;
dbComponent.EditedBy = User.Identity.Name;
dbComponent.EditedDate = DateTime.Now;
_context.Update(dbComponent);
_context.SaveChanges();
UpdateNewsletterHtml((int)dbComponent.BelongsToNewsletterId);
return RedirectToPage(new { id = dbComponent.BelongsToNewsletterId });
}
newsletterSubComponents
параметр пуст при отладке!
Комментарии:
1. Я не понимаю вашу проблему, в чем проблема? в контроллере newsletterSubComponents имеет значение null?
2. @nalnpir да , точно , значение
newsletterSubComponents
равно нулю
Ответ №1:
Я обновил метод для передачи списка через javascript, вы можете обратиться к следующему примеру.
В частичном представлении я вводю pagemodel и смимулирую некоторые данные.
@model projectname.Pages.IndexModel
@{
Model.newsletterSubComponents.Add(new Models.NewsletterSubComponents() { NewPlantArticleId = 0 });
Model.newsletterSubComponents.Add(new Models.NewsletterSubComponents() { NewPlantArticleId = 2 });
}
<form>
@for (var i = 0; i < Model.newsletterSubComponents.Count; i)
{
<select class="form-control Shoplist News-plant-select_1 mt-2" data-search="true" onchange="changeVal(event)" asp-for="@Model.newsletterSubComponents[i].NewPlantArticleId">
<option value="0">Bitte auswählen</option>
</select>
}
@Html.AntiForgeryToken()
<button type="button" onclick="send()">btn</button>
</form>
Используйте javascript для передачи этого списка.
@section Scripts{
<script>
var SubComponents = [];
var s = '@Model.newsletterSubComponents.Count()'
for (var i = 0; i < s; i ) {
SubComponents[i] = { "NewPlantArticleId": $("#newsletterSubComponents_" i "__NewPlantArticleId").val() }
}
function changeVal(e) {
let nid = e.target.id
let k = nid.replace(/[^0-9]/ig,"")
SubComponents[k]={ "NewPlantArticleId": $("#newsletterSubComponents_" k "__NewPlantArticleId").val() }
}
function send() {
$.ajax({
url: '/?handler=UpdateComponent',
method: 'post',
headers: {
RequestVerificationToken: $('input:hidden[name="__RequestVerificationToken"]').val()
},
data: {
newsletterSubComponents: SubComponents
},
success: function (data) {
console.log(data)
},
error: function () {
console.log('ee')
}
})
}
</script>
}
Затем обратитесь к серверной части.
Комментарии:
1. большое вам спасибо за ваше время, но одно но: список заполняется с помощью javascript, а не asp-items=»components». Могу ли я передать список только контроллеру?
2. Да, но я хочу знать, как вы отправляете список на контроллер? Потому что на него может повлиять сопоставление модели.
3. хорошо, я рассмотрю это, возможно, мой подход не очень хорош. но я пытался передать список, точно так же, как мы передаем string или int контроллеру.
4. Вы используете ajax?
5. @AmirDora. можете ли вы принять это как ответ? Или у вас есть какие-либо другие проблемы? пожалуйста, дайте мне знать.