This question already has answers here:
Using ASPX View Engine with MVC 5
(2 answers)
Closed 7 years ago.
I am new to ASP.Net MVC 5 and I want to know if Razor view engine is compulsory, or can you use ASPX view engine?
I try to create new application but I am not getting option to change the view engine.
Razor views are not compulsory. You can use aspx views. When creating your project there is a dropdown that allows you to select which view engine you want the template to use, if you are creating a project from a template.
However, this option doesn't make any difference to your project apart from the views that vs creates in the template. For example, change the name of one of your views, eg. Change home.cshtml to bob.cshtml. Run the project and navigate to the page that uses this view. You will get an error page which displays a list of views that the framework has attempted to find in different folders. This is an operation that uses convention and is the default method mvc will use to find views. Anyway, in the list you will see aspx and cshtml files, so you can go ahead and create an aspx view and mvc will pick it up. Note that the order of the list in the error message is the order mvc will look up each view. It will use the first one it comes across.
Razor views are not compulsory in ASP.net MVC..in ASP.net MVC there are two view Engine are there:
Razor View Engine:
1.Razor View Engine is an advanced view engine and introduced with MVC3. This is not a language but it is a markup syntax.
2.In Razor View Engine we use Layouts.
3.Razor Engine is a little slow compared to Aspx Engine.
Web Form/Aspx View Engine
1.ASPX View Engine is the default view engine for the ASP.NET MVC that is included with ASP.NET MVC from the beginning.
2.In ASPX View Engine we use masterPages.
Related
I'm going to take a few courses in ASP.NET Core MVC and for the frontend HTML stuff I am finding a varied number of examples on how a task should be completed.
The task in question is to display a list of products which contains an image, title, short description, price and View More or Add button for each product.
In webforms, I used to grab a repeater and then used the RowBound event to carry out other functionality.
When I first started to learn ASP.NET MVC, there were no repeaters or gridviews, but recently I have noticed these in the toolbox. The problem I found with these controls in webforms was it added a lot of additional Javascript so when it came to adding CSP we couldn't as these controls broke the page when certain events were triggered.
Fast forward to today and ASP.NET Core MVC can use a similar approach use a HTML table and maybe dataTable to do the same thing (I think from my research) using JQuery, Ajax etc.
My question is, are the available repeater/gridview controls in ASP.NET Core MVC any better/same as webforms? Should I invest in learning in other HTML/jQuery third party controls instead?
Going a little further forward, I would like whichever is the preferred method to also be inline with ASP.NET Core 6 so there isn't a huge learning curve so appreciate any answers someone can provide as to what they have done for controls such as repeater/gridview in ASP.NET Core MVC as I'm pretty confused what should be used.
The fact that in modern asp.net applications is that we are using loops to render items. For instance, if you want to render a list you will have something like this:
#model IEnumerable<ViewComponentSample.Models.TodoItem>
<ul>
#foreach (var todo in Model)
{
<li>#todo.Name</li>
}
</ul>
Where you are rendering all items in the model defined at the top of the page. Which is being passed to the view from the controller.
And yes you can all kind of loops such as #for, #foreach, #while, and #do while based on your situation.
This allows you to render all kinds of items like rendering table rows, bootstrap cards, etc.
And even to make it enhance it furthermore you can create a partial and render items dynamically and improve the code readability and maintainability.
Partials are just a razor markup file that renders HTML output within another markup file's rendering output
#foreach (var product in Model.Products)
{
<partial name="_ProductPartial" model="product" />
}
Read further at Microsoft docs: Create view component
Read further at Microsoft docs: Render partials in a loop
Read further at Microsoft docs: Looping in asp.net
You can easily list your products using Asp.Net Core Razor.
In your .cshtml file you can use such a razor code.
<ul>
#foreach (var product in products) // 'products' is your Model
{
<li>#product.Name</<li>>
<li>#product.CreationDate</li>
<li>#product.Description</li>
<li><img src="~/img/#product.Picture" alt="ProductImage_#product.Name"/></li>
}
</ul>
Here is an introduction about razor:
Razor is a markup syntax for embedding .NET based code into webpages.
The Razor syntax consists of Razor markup, C#, and HTML. Files
containing Razor generally have a .cshtml file extension. Razor is
also found in Razor component files (.razor). Razor syntax is similar
to the templating engines of various JavaScript single-page
application (SPA) frameworks, such as Angular, React, VueJs, and
Svelte.
As the introduction says, You can use c# code in razor page. For Example, You can use Looping like #for, #foreach, #while, and #do while in razor.
More details you can refer to Razor syntax reference for ASP.NET Core.
The project is MVC .NET and the view have RAZOR and Javascript + Jquery.
I really would use react for create new components , I really say if i could combinate react, razor and javascript in the views cshtml.
I'm developing a SPA with ASP.NET MVC for back-end and i was quite curious - Is there any way to build view only using c# to generate my html without using any razor pages or aspx?
You can do this by returning a content, more info here
Following along on a tutorial in MVC, would you tell me the alternative to this in a ASPX page
<div>
<%=ViewData["CurrentTime"]%>
</div>
In a cshtml page, the default view type in MVC 4 on VS2013. When I try the above, the literal meaning is displayed. i.e. ViewData["CurrentTime"] instead of the value DateTime.now
When you using a cshtml. You are working with Razor engine.
In Razor engine, You need to use # like
#ViewData["CurrentTime"]
<%=ViewData["CurrentTime"]%> is a ASP.Net engine code
There are two engines in MVC: Razor and ASP.NET WebForms.
.cshtml filles are the files using Razor engine and this is a default engine of ASP.NET MVC from the third version.
The syntax you are using would work with the old WebForms engine.
So you should write:
#ViewData["CurrentTime"]
in case you use ViewData or
#ViewBag.CurrentTime
in case you use ViewBag which is more common when using Razor view engine and in general newer version of ASP.NET MVC .
I'm working on a website with WebMatrix. I recently asked a question about fetching data from a database. When I had tried writing the data logic within my CSHTML page, I was quickly told that I was in the wrong to do that because I was contradicting the principals of MVC. The problem is, MVC was easy for me in Visual Studio 2010, where I had a view page.aspx and a controller page.aspx.cs for each page, but in WebMatrix, I am using the Razor C# syntax, so my pages are only a single page.cshtml file. When I create a new site or a new file, there is no MVC template, so I have to create the views and controllers myself.
How can I display data in page.cshtml that is fetched from the database using a controller (would my controller be 'page.cshtml.cs'?)? In other words, how can I separate a pages data logic from its actual content/markup/view?
I think you are confusing ASP.NET MVC with WebMatrix WebPages. You are using only WebPages where all the code is inside Razor templates. There are no notions of controllers.
But even in WebMatrix you could separate your data access code in a separate file. Create a special folder called ~/App_Code and inside this folder you could create .NET classes. For example you could have a DataAccess.cs file where you could put your data access logic. You could also reference external assemblies that you have created. For example:
#using MyNamespace
#{
DataAccess myClass = new DataAccess();
...
}