Can we use Razor on an existing ASP.NET 4 website? - asp.net-4.0

Is it possible to use Razor on an existing ASP.NET 4 website?

Yes, you can use Razor with an existing ASP.NET WebSite. Simply open your website using the WebMatrix tool and start adding CSHTML files.
One caveat is that if your website is using WebForms controls the WebMatrix tool will not provide any help working with them in existing aspx pages. Additionally, Razor does not support WebForms so you will not be able to add something like <asp:GridView> to a CSHTML file.

You shouldn't even need to open the site in Web Matrix if you already have VS2010 and MVC 3 (which includes the Visual Studio tools for building ASP.NET Razor websites) installed. Installing MVC 3 makes the libraries required for developing Razor pages available, even to existing web applications.
See:
http://www.asp.net/webmatrix/tutorials/program-asp-net-web-pages-in-visual-studio
You don't need to create a new Web Pages site (as per the instructions). You can just open up an existing web site, right click the site's root folder, click add item and you should see "Web Page (Razor)" as an option.
Inellisense and debugging works in the Razor pages just like the Web Forms pages
As stated above, keep in mind that ASP.Net Web Pages (Razor) and ASP.Net WebForms are really different platforms, and the reusable components of each can not (or at least should not) be used

marcind is correct, if you want to open your existing ASP.NET website in WebMatrix and work on it from within the tool. If, on the other hand (or in addition to), you want to use Razor syntax in your site and stay within VisualStudio, check out this article: http://weblogs.asp.net/rashid/archive/2010/07/10/use-razor-as-asp-net-mvc-viewengine.aspx
There are four things you need to do:
Add References to the Razor assemblies installed with WebMatrix. These can be found at C:\Program Files\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies
Create a custom ViewEngine class, a View class that inherits from IView (not that hard, check out the source in the article above)
Add your new ViewEngine in Global.asax Application_Start()
ViewEngines.Engines.Add(new RazorViewEngine(("cs"));
Create your view pages with a .cshtml extension, instead of .aspx
There are a few steps here, but it's quick work, and the source from the article above will get you a long way there.

Related

Blazor WebAssembly - How can I add a new *.razor page that don't need to recompile or rebuild the project

I am developing a survey project which collects data from the client with Blazor WebAssemly for the Client-side. Each survey form will have a different design and edit-checked rule. So I decide when I create a new survey form, the application will generate a new *.razor page automatically, for example, ClientSurvey.razor page. Everything works well until I navigate the web application to the ClientSurvey.razor I just have created. The system shows error:
404 Not found.
I have to rebuild the project again, and it can show the ClientSurvey.razor page on my website.
With ASP.NET MVC before I don't have to rebuild the project when I add a new aspx page. Does it still work with Blazor WebAssembly? If yes, how can I change the razor page, and it can update on my website automatically without rebuild or recompile?
And I also meet a problem that when I deploy the project in IIS, I don't see where the UI (.*razor) pages are stored, I know they are compiled to dll. How can I keep them in raw files in the same way with ASP.NET work? With ASP.NET, when I deploy it in IIS, there is always a folder to store aspx pages.
Updated: please see the figure to more clearly

How to create an ASP.NET Core class library

I want to use Visual Studio tooling around razor pages, components, views etc. for a project I am working on.
The scenario is the following: I want to have one main web application which is pluggable, so there shall be no direct reference to the plugins (which are class libraries).
class library should allow for razor pages etc
class library should allow for displaying controllers (that one already works)
What I did so far was changing the project file and changing the SDK to Microsoft.NET.Sdk.Web
You can reproduce this issue with this GitHub-link.
However the project I have changed now has "connected services" and launchSettings.json.
Is that a behavior I can ignore or will the project have side effects with the change I made?
What you're looking for (and what the switch to the SDK did) is a Razor Class Library, or RCL for short. It looks like you might have started with an ASP.NET Core site, which would explain the presence of launchSettings.json. An RCL is similar to an ASP.NET Core site in that you can include most of the same things: controllers, views, Razor pages, view components, tag helpers, static files, etc. However, notably, you will not have a Program.cs, Startup.cs, launchSettings.json, or any configuration files like appsettings.json. This is because, at the end of the day, it's just a library, and not something that runs on its own or stands on its own. You can make use of standard abstractions like IConfiguration/IOptions, ILogger, etc., but the actual implementation of these will come from your app, not the library. You should consult the documentation for more information.

Asp.Net core Individual User Authentication Login/Register Pages

I am new to Asp.net core razor pages. I am using asp .net core version 2.2, I am trying to make an application using Social Media authentication services. But the problem I am facing is the weird structure of asp .net core razor applications. I have already done the authentication things, but the problem I am facing is to find the Login and Registration pages. Where can we find them? What if we want to change the layout or something. What should we do for that?
Depending on how you implemented authorization, and based on the documentation :
You should be able to find the scaffolded views in the Areas\Identity's folder of your project or in the ~/Pages/ folder.
If you want to change the layout or something else, you can edit those views (customize) and/or create other ones.
Don't forget to generate the scaffolded views using :
From Solution Explorer, right-click on the project > Add > New Scaffolded Item
Hope it helps.
The default scaffolded Razor pages in ASP.NET Core are made using Partial Views. The default layout of the applicaton can be found in Pages/Shared/_Layout.cshtml.
Inside of this file there is a reference to Pages/Shared/_LoginPartial.cshtml , which contains the layout for the login page. The reference should be somewhere around line 35 in the _Layout.cshtml.
If you want to edit the way the default Razor pages look, this is where you do it.

How do I reference a classic asp file from an MVC project

Apologies if this has already been answered elsewhere, I've been searching for an hour and haven't made any traction. I currently have a classic ASP website (not ASP.Net webforms). I wish to implement a new feature using MVC but have it display as part of the website in it's current form possibly using an iframe.
Currently I have a Visual Studio 2010 solution which contains the website and an MVC 4 internet project. My understanding is that I will probably have to use the MVC project as the startup one and then from the home controller index method redirect to the default.asp page that starts the asp website.
Is there a better way to do this or am I on the correct track?
Is this even possible to do?
As I understand your question, what you want to do is to display the output of one of your .net mvc pages within a classic asp page. That should be possible with an Iframe, although there are more seamless ways. As explained in my comment on the other answer Classic ASP and ASP.net pages can exist in the same website, however none of the C# code will mean anything to the Classic pages. It might help to see your website as two separate projects living in the same root folder.
Rather than an Iframe I suggest you try a server http request. What this is doing in effect is taking the output of a .net mvc page as if it is an external webpage and pasting the contents into your Classic asp page. The code looks like this
<%
Set objXML = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
objXML.Open "GET", "http://full-url-of-your-.net-mvc-page", false
objXML.Send("")
Response.Write objXML.responseText
%>
IIS lets you specify any page you want as your website's landing page, you can do this through IIS manager

How do I register a controller that has been created in an AREA

I am using MVC4's WEB API to expose a controller.
Initially I created created a MVC4 WEBAPI project, set the project not to open any web page, wait for an external app to call the URL (WEB API). The project in VS2010 is set to run from IIS7 Express, not VS2010's Dev Server. This works OK, the browser prompts me to down load a file. Which is OK for me, as the browser does not know what to do with the returned data (RAW TEXT).
Next, I created an AREA in the MVC4 project area, then added a controller (WEB API type).
Then I once again ran the project and in a browser entered the the URL (WEB API). And it fails.
Ed.
The DefaultHttpControllerFactory doesn't work with Areas by default. To get this functionality you have to write your custom HttpControllerFactory.
You can find how to do this at the post How to create HttpControllerFactory to support Areas
While it is possible to place WebApi Controllers in different Areas, ASP.NET MVC 4 RC will still treat these ApiControllers as if they all reside in the same namespace. This is a limitation of the DefaultHttpControllerSelector, which is responsible for selecting the appropriate ApiController.
Fortunately, you can inject your own implementation of this class. In fact, I've already encountered this very issue and written an "area aware" HttpControllerSelector. You can find a blog post of mine about this issue and its solution here:
http://blogs.infosupport.com/asp-net-mvc-4-rc-getting-webapi-and-areas-to-play-nicely/