Blazor has 3 different ways of binding data on the client-side.
Here are the different data binding mechanisms in the client-side blazor framework.
This is the common data binding we’ll see in many of the client-side frameworks.
one-way data binding means binding the data from the model to view.
Unlike many client-side frameworks, we need no bind-
properties here to get the data in the field and bind to HTML.
You can use the bind
attribute on any element to bind the value.
In blazor, we’ll have a property assigned some value in the functions
and use the property in the HTML template.
Let’s get this done.
<h3>One-way data binding</h3> color is : <label>@color</label> @functions{ private string color = "red"; }
So, when we run the app, the label tag will display “red” as a text in the label.
Notice how the @color
property is used in HTML from the @functions
. We must use the @
symbol when accessing the properties/functions declared. If you’ve worked with razor files (.cshtml) this shouldn’t be a new thing.
Let’s make this little interesting by having a div with background and toggling that background color with a button.
<h3>One-way data binding</h3> color is : <label>@color</label> <div style="background-color: @color; padding: 50px;"></div> <button class="btn btn-dark" >When the button is clicked, the background color is changed from red to green and vice-versa and the content in the HTML is also changed accordingly.
Two-way data binding
Two-way data binding is the synchronization of data between the model and the view. In Blazor, this is like synchronization between the properties in the functions and the HTML.
1.
bind-value-oninput
attributeFor the two-way binding, in blazor, we have a dedicated
bind-value-oninput
attribute.Let’s have a label and a text box for greeting the person who entered text.
<h3>Two-way data binding</h3> <label>Hello @labelText !!</label><br/> <input class="input-group-text" bind-value-oninput="@labelText"/> @functions{ private string labelText = "Karthik"; }So, the
oninput
bind attribute will fire for every character entered in the textbox.
2.
bind-value-onchange
attributeThe
bind-value-onchange
directive will work like a blur event in jQuery. After entering the text in the textbox and focusing out, it will update the value of the property in DOM.I’ve tried replacing the
bind-value-oninput
with thebind-value-onchange
directive in the above example.
Component parameters
Components in blazor can pass the parameters from parent to child component.
This is like passing the model values to a partial view in ASP.NET MVC except that we don’t have events in the child component to get notified when the values are updated in the parent component.
Let’s have a year increment function in the parent component and pass that year parameter to child component. In the child component, we will check if the year supplied is a leap year or not.
<h3>Component parameters</h3> <p>Year: @Year</p> <br /> <button class="btn btn-outline-dark" >Here’s the child component:
<div style="border: 2px dashed gray;"> <h2>Leap Year checker</h2> <hr /> <h3>Year: @Year</h3> <h3>@IsLeap</h3> </div> @functions{ [Parameter] private int Year { get; set; } private string IsLeap { get { if (((Year % 4 == 0) && (Year % 100 != 0)) || (Year % 400 == 0)) { return Year + " is a leap year"; } else { return Year + " is not a leap year"; } } set { } } [Parameter] private EventCallback<int> YearChanged { get; set; } }The parameters that are to be passed across the components should be decorated with
Parameter
attribute. This should be done in both parent and child components.This child component binding happens with the
YearChanged
event in the child component as this matches the year parameter’s convention.So, by convention the child component parameter should be
<LeapYear bind-Year-YearChanged="@Year" />but that is equivalent to
<LeapYear bind-Year="@Year" />To check if the year is a leap year or not we’ll have an
IsLeap
property in the child component and it will check if the year is a leap or not.
That’s it for the data binding in client-side blazor framework.
Source code
[Source code of data binding examples is on github](https://github.com/karthikchintala1/Data-binding-in-Blazor).
Note: You need visual studio 2019 Preview (as of this May 2019) and .NET Core 3+ to run the solution.
Pic Credits
– Featured image by [Efe Kurnaz]( https://unsplash.com/photos/Rs5BQj5zbf8) on Unsplash.com
Karthik is a passionate Full Stack developer working primarily on .NET Core, microservices, distributed systems, VUE and JavaScript. He also loves NBA basketball so you might find some NBA examples in his posts and he owns this blog.
In this post, we’ll see how to test gRPC Server applications using different clients. And… Read More
In this post, we'll create a new gRPC project in ASP.NET Core and see what's… Read More
In this blog post, we’ll see how to run dotnet core projects without opening visual… Read More
Programmatically evaluating policies is useful when we want to provide access or hide some data… Read More
We saw how we could set up policy-based authorization in our previous article. In this… Read More
What is policy-based authorization and how to set up policy-based authorization with handlers and policies… Read More
This website uses cookies.