id每次都返回null

问题描述 投票:0回答:1

我正在尝试更改材料的信息,我尝试的方式是有一个所有材料的列表,并且在特定方法的 div 中我放置了一个更改材料按钮,可以将您带到不同的位置页面上有一个表单,您可以在其中添加新数据。

该表单将调用编辑方法。问题是,当调用该方法时,它会收到错误,因为 id 为 null。因此,在第二个视图页面和控制器类之间的某个位置,id 丢失了,我不知道如何处理它,我缺少什么。

我尝试获取材料.Id 并将其放入 asp 中,这样表单将专门显示该材料。

这是表单所在的视图类

<form id="editForm" asp-action="Edit" asp-controller="Merde"  method="post">
    <div asp-validation-summary="All" class="text-danger"></div>
    <input type="hidden" asp-for="Id"  />
    <div class="form-group">
        <label asp-for="Title" class="control-label">Titel</label>
        <input asp-for="Title" class="form-control" />
        <span asp-validation-for="Title" class="text-danger"></span>
    </div>
    <div class="form-group">
        <label asp-for="Description" class="control-label">Beskrivning</label>
        <textarea asp-for="Description" class="form-control"></textarea>
        <span asp-validation-for="Description" class="text-danger"></span>
    </div>
    <div class="form-group">
        <label asp-for="Color" class="control-label">Färg</label>
        <input asp-for="Color" class="form-control" />
        <span asp-validation-for="Color" class="text-danger"></span>
    </div>
    <div class="form-group">
        <label asp-for="Pattern" class="control-label">Mönster</label>
        <input asp-for="Pattern" class="form-control" />
        <span asp-validation-for="Pattern" class="text-danger"></span>
    </div>
    <div class="form-group">
        <label asp-for="MaterialType" class="control-label">Materialtyp</label>
        <select asp-for="MaterialType" class="form-control">
            @foreach (var materialType in Enum.GetValues(typeof(MaterialType)))
            {
                <option value="@materialType">@materialType</option>
            }
        </select>
        <span asp-validation-for="MaterialType" class="text-danger"></span>
    </div>
    <div class="form-group">
        <input type="submit" id="saveButton" class="btn btn-primary" value="spara">
        <a asp-action="AdddMaterials" class="btn btn-secondary">Avbryt</a>
    </div>
</form>

方法是这样的:

[HttpPost]
public IActionResult Edit(int id, EditMaterialViewModel model)
{
    Console.WriteLine(model.Id);
    //if (ModelState.IsValid)
    //{
        var material = _context.Materials.Find(id);
    //if (material == null)
    //{
    //    return NotFound();
    //}
        material.Id = model.Id;
        material.Title = model.Title;
        material.Description = model.Description;
        material.Color = model.Color;
        material.Pattern = model.Pattern;
        material.MaterialType = model.MaterialType;

        _context.Update(material);
        _context.SaveChanges();

        TempData["SuccessMessage"] = "Ändring av material lyckades!";

    var createMaterial = new CreateMaterial();

    /*var materials*/
    createMaterial.MaterialsList = _context.Materials.ToList();
    createMaterial.Materials = new Materials();

    // ViewBag.Materials = materials;
    return View("AdddMaterials", createMaterial);
}

这就是我尝试从中获取 id 的地方:

@foreach (var material in @Model.MaterialsList)
{
if (material.Deleted == false)  // Check if material is not deleted
{
    <div class="card mb-3">
        <div class="card-body">
           <h5 class="card-title">Material: @material.Title</h5>
           <p class="card-text">Beskrivning: @material.Description</p>
           <p class="card-text">Färg: @material.Color</p>
           <p class="card-text">Mönster: @(material.Pattern ?? "Inget mönster angivet")</p>
           <p class="card-text">Material Typ: @material.MaterialType</p>

           <!-- Delete Button -->
           <input type="hidden" name="id" value="@material.Id" />
           <button onclick="openPopup(@material.Id)" class="btn btn-danger">Delete</button>
           <button class="btn btn-primary"><a class="linkToTheFuckItEverythingIsGoingWrong" asp-area="" asp-controller="Merde" asp-action="EditMaterialViewModel" asp-route-id="@material.Id">Ändra material(@material.Id)</a></button>
        </div>
    </div>
}
}
c# asp.net asp.net-mvc razor asp.net-core-mvc
1个回答
0
投票

一个朋友帮我解决了这个问题,因为我的第二个视图页面和控制器之间没有关系,所以我需要这个'

public IActionResult EditMaterialViewModel(int id){var createMaterial = new CreateMaterial(); createMaterial.Materials = new Materials(); createMaterial.Materials.Id = id; return View(createMaterial);}
'来建立连接,以便重新获取id

© www.soinside.com 2019 - 2024. All rights reserved.