The largest .NET CMS is migrating to .NET Core
Tags: news, csharp, dotnet, aspnet
Published: 2023-07-10 14:53:59

[Elanat](https://elanat.net) announced in the news that the migration from ASP.NET Standard to ASP.NET Core is currently underway and in the near future Elanat will be provided using the ASP.NET Core infrastructure. As stated in the news, changing the codes on the server side is done in the best possible and simple way, and most of the codes can be changed by applying global Replase; the reason for the simplicity of the migration process is the independence feature of the server side, which was given special attention when creating Elanat on the .NET standard. Interestingly, it has been announced that the use of a powerful [Code-Behind](https://github.com/elanatframework/Code_behind) library makes Elanat more server-side independent in .NET Core than before; therefore, it greatly increases its independence from the server's infrastructure and programming language.

[Elanat](https://elanat.net), the largest .NET CMS, gives developers a lot of power for web development. Elanat is so powerful that it is called Elanat framework. Supporting 8 types of add-ons: Component, Module, Plugin, Patch, Page, Fetch, Extra Helper, Editor, as well as Elanat's add-on-oriented nature, allows web developers to have the most freedom to create the most powerful websites or portals.

The powerful Code-Behind library allows Elanat to have more freedom in presenting new features compared to the default dot net core MVC structure, which includes cshtml pages, and avoids the unnecessary limitations of Microsoft's aspdotnet core that are used by similar dot net systems.

An example of .NET Standard code changes to .NET Core

## View
aspx file in .NET Standard

```html
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="elanat.MemberChangeEmail" %>
<div id="div_ChangeEmailPostBack">

    <div class="el_head">
        <%=model.MemberLanguage%>
    </div>

    <form id="frm_MemberChangeEmail" method="post" action="<%=elanat.AspxHtmlValue.SitePath()%>page/member/change_profile/change_email/Default.aspx">

        <div class="el_part_row">
            <div id="div_ChangeEmailTitle" class="el_title" onclick="el_HidePart(this); el_SetIframeAutoHeight()">
                <%=model.ChangeEmailLanguage%>
                <div class="el_dash"></div>
            </div>
            <div class="el_item">
                <%=model.UserEmailLanguage%>
            </div>
            <div class="el_item">
                <input id="txt_UserEmail" name="txt_UserEmail" type="text" value="<%=model.UserEmailValue%>" class="el_text_input el_left_to_right<%=model.UserEmailCssClass%>" <%=model.UserEmailAttribute%> />
            </div>
            <div class="el_item">
                <%=model.RepeatEmailLanguage%>
            </div>
            <div class="el_item">
                <input id="txt_RepeatEmail" name="txt_RepeatEmail" type="text" value="<%=model.RepeatEmaiValue%>" class="el_text_input el_left_to_right<%=model.RepeatEmailCssClass%>" <%=model.RepeatEmailtAttribute%> />
            </div>
            <div class="el_item">
                <input id="btn_ChangeEmail" name="btn_ChangeEmail" type="submit" class="el_button_input" value="<%=model.ChangeEmailLanguage%>" onclick="el_AjaxPostBack(this, false, 'frm_MemberChangeEmail')" />
            </div>
        </div>

    </form>
</div>
```

aspx file in .NET Core

```html
<%@ Page Controller="Elanat.MemberChangeEmailController" Model="Elanat.MemberChangeEmailModel" %>
<div id="div_ChangeEmailPostBack">

    <div class="el_head">
        <%=model.MemberLanguage%>
    </div>

    <form id="frm_MemberChangeEmail" method="post" action="<%=Elanat.AspxHtmlValue.SitePath()%>page/member/change_profile/change_email/Default.aspx">

        <div class="el_part_row">
            <div id="div_ChangeEmailTitle" class="el_title" onclick="el_HidePart(this); el_SetIframeAutoHeight()">
                <%=model.ChangeEmailLanguage%>
                <div class="el_dash"></div>
            </div>
            <div class="el_item">
                <%=model.UserEmailLanguage%>
            </div>
            <div class="el_item">
                <input id="txt_UserEmail" name="txt_UserEmail" type="text" value="<%=model.UserEmailValue%>" class="el_text_input el_left_to_right<%=model.UserEmailCssClass%>" <%=model.UserEmailAttribute%> />
            </div>
            <div class="el_item">
                <%=model.RepeatEmailLanguage%>
            </div>
            <div class="el_item">
                <input id="txt_RepeatEmail" name="txt_RepeatEmail" type="text" value="<%=model.RepeatEmaiValue%>" class="el_text_input el_left_to_right<%=model.RepeatEmailCssClass%>" <%=model.RepeatEmailtAttribute%> />
            </div>
            <div class="el_item">
                <input id="btn_ChangeEmail" name="btn_ChangeEmail" type="submit" class="el_button_input" value="<%=model.ChangeEmailLanguage%>" onclick="el_AjaxPostBack(this, false, 'frm_MemberChangeEmail')" />
            </div>
        </div>

    </form>
</div>
```
As you can see, only the first line of the aspx page information has changed and the rest of the data has remained unchanged.

Controller section in .NET Standard

```csharp
using System;

namespace elanat
{
    public partial class MemberChangeEmail : System.Web.UI.Page
    {
        public MemberChangeEmailModel model = new MemberChangeEmailModel();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(Request.Form["btn_ChangeEmail"]))
                btn_ChangeEmail_Click(sender, e);


            model.SetValue();
            

            // Set Required Field Validation
            model.SetImportantField();
        }

        protected void btn_ChangeEmail_Click(object sender, EventArgs e)
        {
            model.IsFirstStart = false;

            model.UserEmailValue = Request.Form["txt_UserEmail"];
            model.RepeatEmaiValue = Request.Form["txt_RepeatEmail"];


            // Evaluate Field Check
            model.EvaluateField(Request.Form);
            if (model.FindEvaluateError)
            {
                ResponseForm rf = new ResponseForm(StaticObject.GetCurrentSiteGlobalLanguage());

                foreach (string EvaluateError in model.EvaluateErrorList)
                    rf.AddLocalMessage(EvaluateError, "problem");

                rf.RedirectToResponseFormPage();
            }


            if (Request.Form["txt_UserEmail"] != Request.Form["txt_RepeatEmail"])
            {
                model.EmailEqualityErrorView();
                return;
            }

            model.ChangeEmail();

            model.SuccessView();
        }
    }
}
```

## Controller
Controller section in .NET Core

```csharp
using CodeBehind;

namespace Elanat
{
    public partial class MemberChangeEmailController : CodeBehindController
    {
        public MemberChangeEmailModel model = new MemberChangeEmailModel();

        public void PageLoad(HttpContext context)
        {
            if (!string.IsNullOrEmpty(context.Request.Form["btn_ChangeEmail"]))
                btn_ChangeEmail_Click(context);


            model.SetValue();
            

            // Set Required Field Validation
            model.SetImportantField();

            View(model);
        }

        protected void btn_ChangeEmail_Click(HttpContext context)
        {
            model.IsFirstStart = false;

            model.UserEmailValue = context.Request.Form["txt_UserEmail"];
            model.RepeatEmaiValue = context.Request.Form["txt_RepeatEmail"];


            // Evaluate Field Check
            model.EvaluateField(context.Request.Form);
            if (model.FindEvaluateError)
            {
                ResponseForm rf = new ResponseForm(StaticObject.GetCurrentSiteGlobalLanguage());

                foreach (string EvaluateError in model.EvaluateErrorList)
                    rf.AddLocalMessage(EvaluateError, "problem");

                rf.RedirectToResponseFormPage(context);
            }


            if (context.Request.Form["txt_UserEmail"] != context.Request.Form["txt_RepeatEmail"])
            {
                model.EmailEqualityErrorView();
                return;
            }

            model.ChangeEmail();

            model.SuccessView();
        }
    }
}
```
Controller section changes have also been done simply
The following are the controller changes:

Added CodeBehind namespace
System.Web.UI.Page has been removed and CodeBehindController has been added instead
The underline of the main method has been remove(`Page_Load` to `PageLoad`)
The main method has been changed from private to public
The following input arguments were omitted
`object sender, EventArgs e`
And the following new argument is added
`HttpContext context`

`View(model)` method; Added before the end of the main method

To access the current HttpContext, the HttpContext context argument has been added inside the btn_ChangeEmail_Click method.
Added context prefix to Request

Please note that the capitalization of the first letter of the project name and the addition of Controller to the name of the MemberChangeEmail class are for arranging the naming and are not required!


## Model
CodeBehind namespace has been added in the model section class
The parent class name of CodeBehindModel is also added in front of the model class name
`public partial class MemberChangeEmailModel : CodeBehindModel`