2017-09-15 7 views
1

コア2.0のRazor Pagesの詳細を取得しようとしていますが、投稿に問題があります。これは面白い作品ではなく、かみそりのページでできることをより深く理解するためのコードです。私のボタンがフォームにある場合、ビューにデータを戻しません。

私のボタンがフォームにある場合、ビューにデータを戻さないという問題があります。したがって、OnPostConcatURL()のcomputedURLは決してビューに到達しません。

ボタンがフォームの外にある場合、フォームデータはポストコントローラのOnPostEdit23には届きませんが、ComputedURLをビューに返すことができます。明らかに私は何か、あるいは多くを逃しています。そして、私はこれを解決するための例を見つけることができません。

@page 
 
@model VisibilityTest 
 
@{ ViewData["Title"] = "Visibility Test Site"; } 
 
<form id="frmVisibility" method="post"> 
 
    <div class="container"> 
 
    <div class="row form-group"> 
 
     <div class="col-md-1"> Select Portal: </div> 
 
     <div class="col-md-1"><select id="ddlEnvironment" asp-for="selectedEnvironment" asp-items="Model.Environments"></select></div> 
 
     <div class="col-md-2"><select id="ddlPortalName" asp-for="selectedPortalName" asp-items="Model.portalNames"></select></div> 
 
     <div class="col-md-3"><input asp-for="@Model.ComputedURL" /></div> 
 
    </div> 
 
    <div class="row form-group"> 
 
     <div class="col-md-1"><button id="btnConcatURL" asp-page-handler="ConcatURL" type="submit" class="btn btn-primary">Submit23</button></div> 
 
    </div> 
 
    </div> 
 
</form> 
 
<form method="post"> 
 
    <button asp-page-handler="edit23" class="btn btn-default">Edit2</button> 
 
</form>

[BindProperty] 
    public string ComputedURL { get; set; } 

    public void OnGet() 
    { 
     config = GetConfigFile(); 
     PopulatedEnvironmentSelectList(); 
     PopulatePortalNameSelectList(config);   
    } 

    public IActionResult OnPost() 
    {   
     ComputedURL = selectedEnvironment + selectedPortalName; 
     return RedirectToPage("./VisibilityTest"); 
    } 

    public void OnPostConcatURL() 
    {   
     ComputedURL = "this is a test";      
    } 

    public void OnPostEdit23() 
    {     
     ComputedURL = "this is a test"; 
    } 
+0

あなたはすべてのあなたのポストのアクションにブレークポイントを追加し、呼び出しているかを確認しましたか? – causita

+0

はいブレークポイントを追加し、関連する方法をヒットしました –

答えて

0

私はまだだけでなくRazorpagesを考え出すだが、私はあなたの例についてのポイントのカップルに気づいた:

  1. モデルは、ページの背後にあるコードでなければなりませんクラスは他のオブジェクトではありません。
  2. BindPropertyはおそらく文字列ではなくオブジェクトにする必要があります(またはコードビハインドオブジェクトの複数のプロパティにバインドできます)
  3. メッセージ(文字列)だけを返す場合は、tempデータ。'
  4. フォームの中にボタンを配置したいのは間違いなく、モデルのプロパティにフォームの値が入力されるためです(ただし、#2と同様に、バインディングのプロパティは単純な文字列以上にする必要があります)。

このように、以下の変更例は、あなたが探しているように思えます(簡単なテストのためにテキストフィールドにドロップダウンを簡略化しました)。

.cshtmlページ

@page 
@model VisibilityTestModel 

@{ 
    ViewData["Title"] = "Visibility Test Site"; 
} 
<hr /> 
<form id="frmVisibility" method="post"> 
    <div class="container"> 
     <div class="row form-group"> 
      <div class="col-md-1"> Select Portal: </div>    
      <div class="col-md-3"><input asp-for="@Model.Portal.Environment" /></div> 
      <div class="col-md-3"><input asp-for="@Model.Portal.Name" /></div> 
      <div class="col-md-3">@Model.Portal.ComputedURL</div> 
     </div> 
     <div class="row form-group"> 
      <div class="col-md-1"><button id="btnConcatURL" asp-page-handler="ConcatURL" type="submit" class="btn btn-primary">Submit23</button></div> 
     </div> 
    </div> 
</form> 
<h3>Msg: @Model.Message</h3> 

.cshtml.csページ:

public class VisibilityTestModel : PageModel { 

    [BindProperty] 
    public PortalInfo Portal { get; set; } 

    [TempData] 
    public string Message { get; set; } 

    public void OnGet() { 
     Portal = new PortalInfo { 
      Environment = "www.example.com", 
      Name = "test" 
     }; 
    } 

    public void OnPostConcatURL() { 
     Portal.ComputedURL = Portal.Environment + " " + Portal.Name; 
     Message = "URL concat"; 
    }  
} 

public class PortalInfo { 
    public string Environment { get; set; } 
    public string Name { get; set; } 
    public string ComputedURL { get; set; } 
} 
+0

ブラッド、私はこの問題を見る時間を取ってくれてありがとう、私の例を見て、私は本当にばかな間違いをしたことに気づいた。ここでの問題は、私の価値を設定しなければならないということです。

に変更する必要があります。 –

関連する問題