1

我正在尝试获取有关带有 core 2.0 的 Razor Pages 的更多信息,但我在帖子中遇到了一些问题。请注意,这不值得生产,它只是用于尝试更好地了解您可以在 razor 页面中做什么的代码。

问题是,如果我的按钮在表单中,它不会将任何数据发送回视图。因此, 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";
    }
4

1 回答 1

1

我还在研究 Razorpages,但我注意到关于您的示例的几点:

  1. 模型应该是页面类而不是其他对象的代码。
  2. BindProperty 可能应该是一个对象,而不仅仅是一个字符串(或者您可以绑定到代码隐藏对象上的多个属性)
  3. 如果您只想传回一条消息(字符串),您可以使用临时数据。
  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; }
}
于 2017-09-16T15:09:53.583 回答