Projectオブジェクトを持つProjectDetailsViewModelがあります。私は、更新フォームと挿入フォームに対して1つのビューしか作成しません。つまり、サーバーがビューにプロジェクトを戻さない場合は、フォームは空でなければならず、プロジェクトがビューに戻された場合は、値を入力してユーザーが変更または追加することができます。 問題は、「プロジェクトの追加」ボタンをクリックしたときに、nullプロジェクトをビューに戻すにはどうすればいいですか?私はプロジェクトIDをビューに返さなければなりません... これは私がこれまで試みたことですが、私はエラーを取得し続ける:「リソースが見つかりません」ありがとう。エラー:「リソースが見つかりません」ビューに空のオブジェクトを渡そうとしています
これはProjectDetailsViewです:
@using DCMS.Models.Projects
@model DCMS.Models.Projects.DataViewModels.ProjectDetailsViewModel
@{
ViewBag.Title = "Project Details";
}
@using (Html.BeginForm("UpdateProjectView", "Project", FormMethod.Post))
{
@*<div class="errormessage">@Html.ValidationSummary(false)</div>*@
if (Model.ReturnMessage != null || Model.ReturnMessage != "")
{
<div class="InfoMessageOuter">
<div class="InfoMessageMiddle">
<div class="InfoMessageInner">@Model.ReturnMessage</div>
</div>
</div>
}
@Html.HiddenFor(m => m.Project.ClientId)
@Html.HiddenFor(m => m.Project.Id)
@Html.HiddenFor(m => m.Project.ModeledOn)
<br/>
@*<h2 style="font-size: 20px; margin: 5px;">@Model.Project.Client.ClientName </h2>*@
<div>
<table style="margin: 0 30px;">
これはコントローラである:
[HttpGet]
public ActionResult GetProjectView(string returnMessage, int? id = null)
{
ProjectDetailsViewModel projectDetails;
if (id == null)
{
projectDetails = new ProjectDetailsViewModel();
return View("ProjectView",projectDetails);
}
projectDetails = ProjectDataAccess.GetProjectDetails(id.Value);
if (projectDetails == null) return PartialView("Error");
projectDetails.ReturnMessage = returnMessage;
return View("ProjectView", projectDetails);
}
[HttpPost]
public ActionResult UpdateProjectView(ProjectDetailsViewModel projectViewModel)
{
if (!ModelState.IsValid)
{
projectViewModel.ReturnMessage = @"Error! Update Failed.";
return GetProjectView(projectViewModel.ReturnMessage, projectViewModel.Project.Id);
}
if (projectViewModel.Project.Id != null)
{
var success = ProjectDataAccess.UpdateProject(projectViewModel.Project);
projectViewModel.ReturnMessage = success ? @"Project Updated Successfully" : @"Error! Update Failed";
}
else if(projectViewModel.Project.Id == null)
{
var success = ProjectDataAccess.AddProject(projectViewModel.Project);
projectViewModel.ReturnMessage = success ? @"Project Added Successfully" : @"Error! Insert Failed";
}
return GetProjectView(projectViewModel.ReturnMessage, projectViewModel.Project.Id);
}
:回答ありがとうございますが、 "GetProjectView"はActionResultメソッドの名前ですので、その関数を返すと、その関数に行き、自動的にそのビューを返します...とにかく、問題はその前にGETメソッドで空のプロジェクトをビューに戻すと、空のフォームが表示されます。要点は、更新と挿入のための1つのビューを持っていたいということです。 – BYG
@BYG RedirectToActionを試しましたか? idがnullのときにProjectViewをロードするので、 – Usman
はい、私は試しても、 "リソースが見つかりません"というエラーが表示されます。 – BYG