我有一个概述页面,该页面正在使用API调用将数据返回到表格视图中,并创建了第二个页面,用于在选择时更新行。当我选择一行时,我可以看到行ID正在传递到下一页,但是它崩溃并显示以下错误:“响应状态代码未指示成功:404(未找到)”
CMTasksPriority.razor
@page "/CMTasks/cmtaskpriority"
@inherits CMTasksPriorityBase
<h1 class="page-title">All Task Prioritys</h1>
@if (CMTaskPriorities == null)
{
<p><em>Loading...</em></p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Task Priority ID</th>
<th>Priority Level</th>
<th>Display Order</th>
<th>Is Deleted</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var tasklevel in CMTaskPriorities)
{
<tr>
<td>@tasklevel.TaskPriorityID</td>
<td>@tasklevel.PriorityLevel</td>
<td>@tasklevel.DisplayOrder</td>
<td>@tasklevel.IsDeleted</td>
<td>
@*<a href="@($"https://localhost:5001/CMTaskPriority/{tasklevel.TaskPriorityID}/tasakpriorityid?id={tasklevel.TaskPriorityID}")" class="btn btn-primary table-btn">*@
<a href="@($"CMTasks/cmtaskpriorityedit/{tasklevel.TaskPriorityID}")" class="btn btn-primary table-btn">
<i class="fas fa-info-circle"></i>
</a>
</td>
</tr>
}
</tbody>
</table>
}
CMTaskPriorityBase.cs
using Microsoft.AspNetCore.Components;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using CouncilManagerShared.CMTasks;
using CouncilManagerUI.Shared;
using CouncilManagerUI.Services;
using System.Net.Http;
using System.Net;
using System.Text;
using System.IO;
namespace CouncilManagerUI.Pages
{
public class CMTasksPriorityBase : ComponentBase
{
[Inject]
public ITaskPriorityDataService PriorityDataService { get; set; }
public List<CMTaskPriority> CMTaskPriorities { get; set; }
protected override async Task OnInitializedAsync()
{
// InitializeTaskPrioritys();
// WebMethod();
CMTaskPriorities = (await PriorityDataService.GetAllTaskPrioritys()).ToList();
// return base.OnInitializedAsync();
}
}
}
CMTaskPriorityEdit.razor
@page "/CMTasks/cmtaskpriorityedit"
@page "/CMTasks/cmtaskpriorityedit/{TaskPriorityID}"
@using CouncilManagerShared
@inherits CMTasksPriorityEditBase
<section class="taskpriority-edit">
@if (!Saved)
{
<h1 class="page-title">Current setting : @CMTaskPriority. </h1>
<EditForm Model="@CMTaskPriority" OnValidSubmit="@HandleValidSubmit" OnInvalidSubmit="@HandleInvalidSubmit">
<DataAnnotationsValidator />
<ValidationSummary />
<div class="form-group row">
<label for="prioritylevel" class="col-sm-3">Priority level: </label>
<InputText id="prioritylevel" class="form-control col-sm-8" @bind-Value="@CMTaskPriority.PriorityLevel" placeholder="Enter priority level" @ref="PriorityLevelInputText"></InputText>
<ValidationMessage class="offset-sm-3 col-sm-8" For="@(() => CMTaskPriority.PriorityLevel)" />
</div>
@*<div class="form-group row">
<label for="displayorder" class="col-sm-3">Display Order: </label>
<InputText id="displayorder" class="form-control col-sm-8" @bind-Value="@CMTaskPriority.DisplayOrder" placeholder="Display Order" @ref="DisplayOrderInputText"></InputText>
<ValidationMessage class="offset-sm-3 col-sm-8" For="@(() => CMTaskPriority.DisplayOrder)" />
</div>*@
<button type="submit" class="btn btn-primary edit-btn">Save task priority</button>
<a class="btn btn-outline-primary edit-outline-btn" @onclick="@NavigateToOverview">Cancel</a>
@if (CMTaskPriority.TaskPriorityID > 0)
{
<a class="btn btn-danger" @onclick="@DeleteTaskPriority"> Delete</a>}
</EditForm> }
else
{
<div class="alert @StatusClass">@Message</div>
<a class="btn btn-outline-primary" @onclick="@NavigateToOverview">Back to overview</a>}
</section>
CMTaskPriorityEditBase.cs
using Microsoft.AspNetCore.Components;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using CouncilManagerShared.CMTasks;
using CouncilManagerUI.Shared;
using CouncilManagerUI.Services;
using System.Net.Http;
using System.Net;
using System.Text;
using System.IO;
using Microsoft.AspNetCore.Components.Forms;
namespace CouncilManagerUI.Pages
{
public class CMTasksPriorityEditBase : ComponentBase
{
[Inject]
public ITaskPriorityDataService TaskPriorityDataService { get; set; }
[Inject] public NavigationManager NavigationManager { get; set; }
[Parameter]
public string TaskPriorityId { get; set; }
public InputText PriorityLevelInputText { get; set; }
public InputText DisplayOrderInputText { get; set; }
public InputText IsDeletedInputText { get; set; }
public CMTaskPriority CMTaskPriority { get; set; } = new CMTaskPriority();
//used to store state of screen
protected string Message = string.Empty;
protected string StatusClass = string.Empty;
protected bool Saved;
protected override async Task OnInitializedAsync()
{
Saved = false;
int.TryParse(TaskPriorityId, out var taskpriorityId);
if (taskpriorityId == 0) //new employee is being created
{
//add some defaults
CMTaskPriority = new CMTaskPriority { };
}
else
{
CMTaskPriority = await TaskPriorityDataService.GetTaskPriorityDetailsByID(int.Parse(TaskPriorityId));
}
;
}
protected async Task HandleValidSubmit()
{
if (CMTaskPriority.TaskPriorityID == 0) //new
{
var addedTaskPriority = await TaskPriorityDataService.AddNewTaskPriority(CMTaskPriority);
if (addedTaskPriority != null)
{
StatusClass = "alert-success";
Message = "New task priority added successfully.";
Saved = true;
}
else
{
StatusClass = "alert-danger";
Message = "Something went wrong adding the new task priority. Please try again.";
Saved = false;
}
}
else
{
await TaskPriorityDataService.UpdateTaskPriority(CMTaskPriority);
StatusClass = "alert-success";
Message = "Task priority updated successfully.";
Saved = true;
}
}
protected void HandleInvalidSubmit()
{
StatusClass = "alert-danger";
Message = "There are some validation errors. Please try again.";
}
protected async Task DeleteTaskPriority()
{
await TaskPriorityDataService.DeleteTaskPriority(CMTaskPriority.TaskPriorityID);
StatusClass = "alert-success";
Message = "Deleted successfully";
Saved = true;
}
protected void NavigateToOverview()
{
NavigationManager.NavigateTo("/CMTasks/cmtaskpriority");
}
}
}
CMTaskPriority.cs
using System;
using System.ComponentModel.DataAnnotations;
namespace CouncilManagerShared.CMTasks
{
public class CMTaskPriority
{
[Key]
public int TaskPriorityID { get; set; }
public string PriorityLevel { get; set; }
public int DisplayOrder { get; set; }
public bool IsDeleted { get; set; }
}
}
在第26行的CMTaskPriorityEditBase.cs中,已从API调用TaskPriorityID并对其进行了设置
public string TaskPriorityId { get; set; }
但是在第34行,以下代码被调用了4次,然后由于错误而停止。
public CMTaskPriority CMTaskPriority { get; set; } = new CMTaskPriority();
using System.Collections.Generic;
using System.Threading.Tasks;
using CouncilManagerShared.CMTasks;
namespace CouncilManagerUI.Services
{
public interface ITaskPriorityDataService
{
Task<IEnumerable<CMTaskPriority>>GetAllTaskPrioritys();
Task<CMTaskPriority> GetTaskPriorityDetailsByID(int TaskPriorityID);
Task<CMTaskPriority> AddNewTaskPriority(CMTaskPriority priority);
Task UpdateTaskPriority(CMTaskPriority priority);
Task DeleteTaskPriority(int TaskPriorityID);
}
}
CMTaskPriorityController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using CouncilManagerShared.CMTasks;
using CouncilManagerAPI.Models;
// For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
namespace CouncilManagerAPI.Controllers
{
[ApiController]
[Route("[controller]")]
public class CMTaskPriorityController : ControllerBase
{
private readonly ICMTaskPriorityRepository _CMTaskPriorityRepository;
public CMTaskPriorityController(ICMTaskPriorityRepository CMTaskPriorityRepository)
{
_CMTaskPriorityRepository = CMTaskPriorityRepository;
}
/// <summary>
/// Get all task priortys
/// </summary>
/// <returns></returns>
[HttpGet]
public IActionResult GetCMTaskPriority()
{
return Ok(_CMTaskPriorityRepository.GetAllCMTaskPriority());
}
/// <summary>
/// Get all task prioriys by id
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("{TaskPriorityID}/tasakpriorityid")]
public IActionResult GetTaskPriorityByID(int id)
{
return Ok(_CMTaskPriorityRepository.GetCMTaskPriorityById(id));
}
/// <summary>
/// Update exiting task priorty
/// </summary>
/// <param name="cmtaskpriority"></param>
/// <returns></returns>
[HttpPut]
public IActionResult UpdateCMTaskPriority([FromBody] CMTaskPriority cmtaskpriority)
{
if (cmtaskpriority == null)
return BadRequest();
if (cmtaskpriority.PriorityLevel == string.Empty || cmtaskpriority.PriorityLevel == string.Empty)
{
ModelState.AddModelError("Priority/Level", "The priority level shouldn't be empty");
}
if (!ModelState.IsValid)
return BadRequest(ModelState);
var CMTaskPriorityToUpdate = _CMTaskPriorityRepository.GetCMTaskPriorityById(cmtaskpriority.TaskPriorityID);
if (CMTaskPriorityToUpdate == null)
return NotFound();
_CMTaskPriorityRepository.UpdateCMTaskPriority(cmtaskpriority);
return NoContent(); //success
}
}
}