2017-05-08 2 views
0

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); 
     } 

答えて

0

あなたがreturn GetProjectViewを使用する場合、それはに戻りますので、あなたがRedirectToAction

このよう
return RedirectToAction("GetProjectView", new{returnMessage=projectViewModel.ReturnMessage,id = projectViewModel.Project.Id}); 

を使用する必要があります同じアクションUpdateProjectViewRedirectToActionを使用すると、GetProjectViewアクションになり、UpdateProjectViewアクションに戻るのではなく、viewを返します。これをチェックすることもできますController.RedirectToAction Method (String, Object)

+0

:回答ありがとうございますが、 "GetProjectView"はActionResultメソッドの名前ですので、その関数を返すと、その関数に行き、自動的にそのビューを返します...とにかく、問題はその前にGETメソッドで空のプロジェクトをビューに戻すと、空のフォームが表示されます。要点は、更新と挿入のための1つのビューを持っていたいということです。 – BYG

+0

@BYG RedirectToActionを試しましたか? idがnullのときにProjectViewをロードするので、 – Usman

+0

はい、私は試しても、 "リソースが見つかりません"というエラーが表示されます。 – BYG

関連する問題