我遇到了以下问题:我需要用户填写几个字段(他执行的工作,并指出这项工作的价格)由于有几个这样的工作,我使用列表,但我得到以下错误:ArgumentOutOfRangeException:索引超出范围。必须为非负数且小于集合的大小。(参数“index”)
当我转到“编辑”页面时,此错误就会出现。
下面是我的控制器代码:
User user = await _userManager.FindByNameAsync(User.Identity.Name);
foreach(var up in _context.TutorProfesionAndCosts.ToList())
{
if (user.Id == up.UserId)
user.ProfesionAndCosts.Add(up);
}
用户模型
public List<TutorProfesionAndCost> ProfesionAndCosts { get; set; }
public User()
{
ProfesionAndCosts = new List<TutorProfesionAndCost>();
}
“工作”模式
public class TutorProfesionAndCost
{
public int Id { get; set; }
public string UserId { get; set; }
public User User { get; set; }
public string EducationalSubject { get; set; }
public int Cost_One { get; set; }
public int Cost_Group { get; set; }
public string Currency { get; set; }
}
编辑页面
@{int i = 0;}
<p>
<div class="row">
<div class="col">
<label class="mb-0">Оберіть предмет який ви викладаєте:</label>
<select asp-for="@Model.Tutor.ProfesionAndCosts[@i].EducationalSubject" required="required">
@foreach (var profesion in Model.educational_Subject)
{
<option value="@profesion.EducationalSubject">@profesion.EducationalSubject</option>
}
</select>
</div>
<div class="col">
<label>Вкажіть вартість за 1 годину:</label>
<p>
<span>Індивідуальне заняття: <input class="money" type="text" asp-for="@Model.Tutor.ProfesionAndCosts[@i].Cost_One" /> </span>
<span>Групове заняття: <input class="money" type="text" asp-for="@Model.Tutor.ProfesionAndCosts[@i].Cost_Group" /> </span>
<select asp-for="@Model.Tutor.ProfesionAndCosts[@i].Currency">
@foreach (var cur in Model.currency)
{
<option value="@cur.CurrencyMoney">@cur.CurrencyMoney</option>
}
</select>
</p>
</div>
</div>
<button onclick="addSubject()">New</button>
</p>
javascript新主题
<script>
function addSubject() {
var index = document.querySelectorAll('.row').length;
var html = `<div class="row">
<div class="col">
<label class="mb-0">Оберіть предмет який ви викладаєте:</label>
<select asp-for="@@Model.Tutor.ProfesionAndCosts[${index}].EducationalSubject" required="required">
@foreach (var profesion in Model.educational_Subject)
{
<option value="@profesion.EducationalSubject">@profesion.EducationalSubject</option>
}
</select>
</div>
<div class="col">
<label>Вкажіть вартість за 1 годину:</label>
<p>
<span>Індивідуальне заняття: <input class="money" type="text" asp-for="@@Model.Tutor.ProfesionAndCosts[${index}].Cost_One" /> </span>
<span>Групове заняття: <input class="money" type="text" asp-for="@@Model.Tutor.ProfesionAndCosts[${index}].Cost_Group" /> </span>
<select asp-for="@@Model.Tutor.ProfesionAndCosts[${index}].Currency">
@foreach(var cur in Model.currency)
{
<option value="@cur.CurrencyMoney">@cur.CurrencyMoney</option>
}
</select>
</p>
</div>
</div>`;
$('#subjects').append(html);
i = index + 1;
}
</script>
1条答案
按热度按时间sr4lhrrt1#
问题解决了。我用“name”代替“asp-for”传递值
控制器
代码不是最好的,但它的工作