Home > OS >  Razor pages view renders original form value instead of modified when reshown
Razor pages view renders original form value instead of modified when reshown

Time:02-22

Moving from ASP.NET Core MVC to Razor pages, there must be an issue in my understanding of passing data to a Razor view.

Here's a simple view:

@page
@model TestModel
@{
    System.Diagnostics.Debug.WriteLine(Model.Name);
}
<form  method="get">
    Name: <input type="text"  asp-for="Name">
    <button type="submit" >Send...</button>
</form>

And here is the view model class with one event handler:

public class TestModel : PageModel
{
    [BindProperty(SupportsGet = true)]
    public string Name { get; set; } = "";
    public TestModel() {}

    public IActionResult OnGet()
    {
        Name  = "N";
        return Page();
    }
}

Then running the project:

  • Debug.WriteLine shows "N" as expected

  • input fields has "N" default value as expected

  • overwrite "N" in the input field eg. to "A" then press Send button

  • Debug.WriteLine shows "AN" as expected so view has got the value modified by OnGet()

  • the input field in the page itself contains the value "A" instead of "AN", the generated HTML contains:

    value="A"

View does not render the modified Model.Name value but the original from the form data.

How can it be corrected to make view to render the modified string?

CodePudding user response:

You can try to add ModelState.Clear(); in OnGet handler.When binding data in client side,it will get value from ModelState prior to Model.

public class TestModel : PageModel
{
    [BindProperty(SupportsGet = true)]
    public string Name { get; set; } = "";
    public TestModel() {}

    public IActionResult OnGet()
    {
        Name  = "N";
        ModelState.Clear();
        return Page();
    }
}
  • Related