【发布时间】:2019-12-02 23:14:46
【问题描述】:
首先,我正在使用 ASP.NET Core 2.1 和 EF Core 2.1 自学 ASP.NET MVC,所以我对此很陌生。
我正在尝试更改创建视图,以接受 ClientID 的可选参数。这个想法是如果没有提供 ID,则允许从所有客户端中进行选择,但如果提供,则强制客户端的表单输入为给定值。
我无法让 GET 识别存在参数,除非该参数专门为 int? id 。如果我把它改成这个,那么当提交给 POST 时,会为重复的 ID 引发异常。
所有的控制器和视图都搭建好了,只有显示的 GET 方法发生了变化。
控制器创建GET方法:
// GET: ServiceRequest/Create/1
public IActionResult Create(int? clientId)
{
ViewData["ClientData"] = new SelectList(_context.Clients, "ID", "FullName");
if (clientId != null ) {
if (_context.Clients.Find(clientId) == null) {
return NotFound();
}
ViewData["ClientID"] = clientId;
ViewData["ClientName"] = _context.Clients.Find(clientId).FullName;
}
ServiceRequest request = new ServiceRequest();
request.Deadline = DateTime.Today;
request.Status = Models.Status.DRAFT;
return View(request);
}
创建视图:
@model AskewServices.Models.ServiceRequest
@{
ViewData["Title"] = "Open Service Request";
}
<h2>@ViewData["Title"]</h2>
<hr />
<div class="row">
<div class="col-md-4">
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Deadline" class="control-label"> </label>
<input asp-for="Deadline" class="form-control" />
<span asp-validation-for="Deadline" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Status" class="control-label"></label>
<select disabled asp-for="Status" class="form-control">
<option value=@AskewServices.Models.Status.DRAFT>Draft</option>
</select>
<span asp-validation-for="Status" class="text-danger"></span>
</div>
<div class="form-group">
<label class="control-label">Client</label>
@if (ViewData.ContainsKey("ClientID")) {
<select disabled asp-for="ClientID" class="form-control">
<option value=@ViewData["ClientID"]>@ViewData["ClientName"]</option>
</select>
} else {
<select asp-for="ClientID" class="form-control" asp-items="ViewBag.ClientData"></select>
}
</div>
<div class="form-group">
<input type="submit" value="Open" class="btn btn-warning" />
<input type="reset" value="Reset" class="btn btn-info" />
</div>
</form>
</div>
</div>
路线:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(
name: "OpenServiceRequest",
template: "{controller=ServiceRequest}/{action=Create}/{clientId?}");
});
思考:参数没有以正确的方式指定,或者路由有问题(可能看不到 ServiceRequest Create 路由)?
【问题讨论】:
标签: c# asp.net-core .net-core asp.net-core-mvc