首页 > 解决方案 > 表单不返回值 ASP.NET Core 2.2

问题描述

我正在尝试从输入元素返回值,但即使值不同,它也会返回 0。

如果这个问题“微不足道”,我深表歉意。但如果你能给我一个答案,那将是一个很大的帮助。

应该将数据添加到数据库的函数:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DodajProizvod(string naziv, int kategorijaId)
{
    Proizvod proizvod = new Proizvod
        {
            KategorijaId = kategorijaId,
            Naziv = naziv
        };

    db.Proizvodi.Add(proizvod);
    await db.SaveChangesAsync();

    return RedirectToAction("VratiProizvode", kategorijaId);
}

型号类:

public class Proizvod
{
    [Key]
    public int ProizvodId { get; set; }
    [StringLength(30)]
    [Required(ErrorMessage = "Unesite Naziv Proizvoda")]
    public string Naziv { get; set; }
    [Required(ErrorMessage = "Izaberite Kategoriju")]
    public int KategorijaId { get; set; }
    public Kategorija Kategorija { get; set; }
}

看法:

<form asp-action="DodajProizvod" method="post">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <input asp-for="KategorijaId" name="kategorijaId" value="@ViewBag.kategorijaId" disabled class="form-control" />
    <div class="form-group">
        <label asp-for="Naziv" class="control-label"></label>
        <input asp-for="Naziv" name="naziv" class="form-control" />
        <span asp-validation-for="Naziv" class="text-danger"></span>
    </div>
    <div class="form-group">
        <input type="submit" value="Dodaj Proizvod" class="btn btn-primary" />
        <a class="btn btn-primary" asp-action="VratiProizvode" asp-route-kategorijaId="@ViewBag.kategorijaId">Otkazi</a>
    </div>
</form>

正如您在输入中看到的,值为 3:

在此处输入图像描述

但是当我提交时,它返回0:

在此处输入图像描述

标签: c#asp.net-core

解决方案


您应该将disabled属性替换readonly为输入标签KategorijaId

<input asp-for="KategorijaId" value="@ViewBag.kategorijaId" readonly class="form-control" />

更改action

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DodajProizvod(Proizvod model)

然后改成view这个。

@model Proizvod
<form asp-action="DodajProizvod" method="post" asp-antiforgery="true">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <input asp-for="KategorijaId" value="@ViewBag.kategorijaId" readonly class="form-control" />
    <div class="form-group">
        <label asp-for="Naziv" class="control-label"></label>
        <input asp-for="Naziv" class="form-control" />
        <span asp-validation-for="Naziv" class="text-danger"></span>
    </div>
    <div class="form-group">
        <input type="submit" value="Dodaj Proizvod" class="btn btn-primary" />
        <a class="btn btn-primary" asp-action="VratiProizvode" asp-route-kategorijaId="@ViewBag.kategorijaId">Otkazi</a>
    </div>
</form>

推荐阅读