MVC:编辑操作不调用编辑视图
MVC: Edit Action is not invoking the Edit view
我有一个编辑操作。当调用 Action 时,我希望 Edit 视图呈现,但它没有。视图是 Edit.cshtml。我有一个类似的视图 Add.cshtml,效果很好(添加是一个按钮,编辑是网格内的 link。
控制器方法
[HttpPost]
public IActionResult Edit(int Id)
{
try
{
var jurisdictionId = _user.Current().JurisdictionId;
OrganizationType ot = new OrganizationType();
ot.Id = Id;
ot.OrganizationName = _electedOfficials.getOrgTypeName(jurisdictionId, Id);
return View(ot);
//return View("Edit", ot);
}
catch (Exception e)
{
_logger?.LogCritical(new EventId(101, "CAdminOrganizationType"), e, $"Error when loading Edit Orginization Type View");
throw;
}
}
编辑视图 (Edit.cshtml)
@model Platinum.Entities.OrganizationType
@{
ViewData["Title"] = "Editing Organization Type";
}
<div class="card pd-20 pd-sm-40">
<div class="form-layout">
<form asp-action="Edit">
<div class="row mg-b-25">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input asp-for="Id" hidden />
<div class="col-md-2">
<div class="form-group">
<label asp-for="OrganizationName" class="form-control-label">Name</label>
<input asp-for="OrganizationName" class="form-control" />
<span asp-validation-for="OrganizationName" class="text-danger"></span>
</div>
</div>
</div>
<div class="form-layout-footer">
<input type="submit" value="Create Organization Type" class="btn btn-default mg-r- 5" />
<a asp-action="Index" class="btn btn-danger mg-r-5">Back</a>
</div>
</form>
</div>
</div>
@section scripts{
<script type="text/javascript">
$(document).ready(function () {
});
</script>
}
在索引视图中单击“编辑”时执行的Javascript
function Edit(id) {
var url = '/CAdminOrganizationType/Edit/' + id
$.ajax({
type: "POST",
url: url,
contentType: "application/json"
}).fail(function () {
magalert.communicationError();
});
}
据我所知,如果没有 returning 到 ajax 响应,我们无法呈现页面。
因为 ajax 会将请求发送到控制器操作,并且操作 return 将视图作为 html 响应返回给 ajax。
但是你不处理ajax中的响应,所以当前页面不会改变。
如果您只想将 Id 传递给 Edit 方法和 return Edit 视图,我建议您可以尝试使用 window.location
,这将使此页面重定向到 Edit 视图实现刷新整个页面。
另外window.location
只支持get method.I建议使用[HttpGet]
方法渲染页面,然后在ajax
中的success函数加载页面。
这是我的代码:
Ajax
@section Scripts
{
<script>
function Edit(id) {
var url = '/Home/Edit/' + id
$.ajax({
type: "get",
url: url,
contentType: "application/json",
success:function(){
window.location.href="/Home/Edit/"+id
},
error:function () {
magalert.communicationError();
}
});
}
</script>
}
控制器方法
[HttpGet]
public IActionResult Edit(int Id)
{
try
{
var jurisdictionId = _user.Current().JurisdictionId;
OrganizationType ot = new OrganizationType();
ot.Id = Id;
ot.OrganizationName = _electedOfficials.getOrgTypeName(jurisdictionId, Id);
return View(ot);
}
catch (Exception e)
{
_logger?.LogCritical(new EventId(101, "CAdminOrganizationType"), e, $"Error when loading Edit Orginization Type View");
throw;
}
}
然后,您可以加载视图
我有一个编辑操作。当调用 Action 时,我希望 Edit 视图呈现,但它没有。视图是 Edit.cshtml。我有一个类似的视图 Add.cshtml,效果很好(添加是一个按钮,编辑是网格内的 link。
控制器方法
[HttpPost]
public IActionResult Edit(int Id)
{
try
{
var jurisdictionId = _user.Current().JurisdictionId;
OrganizationType ot = new OrganizationType();
ot.Id = Id;
ot.OrganizationName = _electedOfficials.getOrgTypeName(jurisdictionId, Id);
return View(ot);
//return View("Edit", ot);
}
catch (Exception e)
{
_logger?.LogCritical(new EventId(101, "CAdminOrganizationType"), e, $"Error when loading Edit Orginization Type View");
throw;
}
}
编辑视图 (Edit.cshtml)
@model Platinum.Entities.OrganizationType
@{
ViewData["Title"] = "Editing Organization Type";
}
<div class="card pd-20 pd-sm-40">
<div class="form-layout">
<form asp-action="Edit">
<div class="row mg-b-25">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input asp-for="Id" hidden />
<div class="col-md-2">
<div class="form-group">
<label asp-for="OrganizationName" class="form-control-label">Name</label>
<input asp-for="OrganizationName" class="form-control" />
<span asp-validation-for="OrganizationName" class="text-danger"></span>
</div>
</div>
</div>
<div class="form-layout-footer">
<input type="submit" value="Create Organization Type" class="btn btn-default mg-r- 5" />
<a asp-action="Index" class="btn btn-danger mg-r-5">Back</a>
</div>
</form>
</div>
</div>
@section scripts{
<script type="text/javascript">
$(document).ready(function () {
});
</script>
}
在索引视图中单击“编辑”时执行的Javascript
function Edit(id) {
var url = '/CAdminOrganizationType/Edit/' + id
$.ajax({
type: "POST",
url: url,
contentType: "application/json"
}).fail(function () {
magalert.communicationError();
});
}
据我所知,如果没有 returning 到 ajax 响应,我们无法呈现页面。
因为 ajax 会将请求发送到控制器操作,并且操作 return 将视图作为 html 响应返回给 ajax。 但是你不处理ajax中的响应,所以当前页面不会改变。
如果您只想将 Id 传递给 Edit 方法和 return Edit 视图,我建议您可以尝试使用 window.location
,这将使此页面重定向到 Edit 视图实现刷新整个页面。
另外window.location
只支持get method.I建议使用[HttpGet]
方法渲染页面,然后在ajax
中的success函数加载页面。
这是我的代码:
Ajax
@section Scripts
{
<script>
function Edit(id) {
var url = '/Home/Edit/' + id
$.ajax({
type: "get",
url: url,
contentType: "application/json",
success:function(){
window.location.href="/Home/Edit/"+id
},
error:function () {
magalert.communicationError();
}
});
}
</script>
}
控制器方法
[HttpGet]
public IActionResult Edit(int Id)
{
try
{
var jurisdictionId = _user.Current().JurisdictionId;
OrganizationType ot = new OrganizationType();
ot.Id = Id;
ot.OrganizationName = _electedOfficials.getOrgTypeName(jurisdictionId, Id);
return View(ot);
}
catch (Exception e)
{
_logger?.LogCritical(new EventId(101, "CAdminOrganizationType"), e, $"Error when loading Edit Orginization Type View");
throw;
}
}
然后,您可以加载视图