Sdscompany.ru

Компьютерный журнал
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Html actionlink mvc

ASP.NET MVC — Razor

In this chapter, we will look at the Razor view engine in ASP.NET MVC applications and some of the reasons why Razor exists. Razor is a markup syntax that lets you embed server-based code into web pages using C# and VB.Net. It is not a programming language. It is a server side markup language.

Razor has no ties to ASP.NET MVC because Razor is a general-purpose templating engine. You can use it anywhere to generate output like HTML. It’s just that ASP.NET MVC has implemented a view engine that allows us to use Razor inside of an MVC application to produce HTML.

You will have a template file that’s a mix of some literal text and some blocks of code. You combine that template with some data or a specific model where the template specifies where the data is supposed to appear, and then you execute the template to generate your output.

Razor Vs ASPX

Razor is very similar to how ASPX files work. ASPX files are templates, which contain literal text and some C# code that specifies where your data should appear. We execute those to generate the HTML for our application.

ASPX files have a dependency on the ASP.NET runtime to be available to parse and execute those ASPX files. Razor has no such dependencies.

Unlike ASPX files, Razor has some different design goals.

Goals

Microsoft wanted Razor to be easy to use and easy to learn, and work inside of tools like Visual Studio so that IntelliSense is available, the debugger is available, but they wanted Razor to have no ties to a specific technology, like ASP.NET or ASP.NET MVC.

If you’re familiar with the life cycle of an ASPX file, then you’re probably aware that there’s a dependency on the ASP.NET runtime to be available to parse and execute those ASPX files. Microsoft wanted Razor to be smart, to make a developer’s job easier.

Let’s take a look at a sample code from an ASPX file, which contains some literal text. This is our HTML markup. It also contains little bits of C# code.

But these Web forms were basically repurposed by Microsoft to work with the earlier releases of MVC, meaning ASPX files were never a perfect match for MVC.

The syntax is a bit clunky when you need to transition from C# code back to HTML and from HTML code back into C# code. You are also prompted by IntelliSense to do things that just don’t make sense in an MVC project, like add directives for output caching and user controls into an ASPX view.

Now look at this code which produces the same output, the difference being it is using the Razor syntax.

With Razor syntax you can begin a bit of C# code by using the ‘@’ sign and the Razor parse will automatically switch into parsing this statement, this foreach statement, as a bit of C# code.

But when we’re finished with the foreach statement and we have our opening curly brace, we can transition from C# code into HTML without putting an explicit token in there, like the percent in the angle bracket signs.

The Razor parser is smart enough to switch between C# code and HTML and again, from HTML back into C# code when we need to place our closing curly brace here. If you compare these two blocks of code, I think you’ll agree that the Razor version is easier to read and easier to write.

Creating a View Using Razor

Let’s create a new ASP.Net MVC project.

Enter the name of project in the name field and click Ok.

To keep things simple, select the Empty option and check the MVC checkbox in the ‘Add folders and core references for’ section and click Ok. It will create a basic MVC project with minimal predefined content.

Once the project is created by Visual Studio, you will see a number of files and folders displayed in the Solution Explorer window. As we have created ASP.Net MVC project from an empty project template, so at the moment the application does not contain anything to run. Since we start with an empty application and don’t even have a single controller, let’s add a HomeController.

To add a controller right-click on the controller folder in the solution explorer and select Add → Controller. It will display the Add Scaffold dialog.

Select the MVC 5 Controller – Empty option and click Add button and then the Add Controller dialog will appear.

Set the name to HomeController and click ‘Add’ button. You will see a new C# file ‘HomeController.cs’ in the Controllers folder, which is open for editing in Visual Studio as well.

Right-click on the Index action and select Add View…

Select Empty from the Template dropdown and click Add button. Visual Studio will create an Index.cshtml file inside the View/Home folder.

Notice that Razor view has a cshtml extension. If you’re building your MVC application using Visual Basic it will be a VBHTML extension. At the top of this file is a code block that is explicitly setting this Layout property to null.

When you run this application you will see the blank webpage because we have created a View from an Empty template.

Let’s add some C# code to make things more interesting. To write some C# code inside a Razor view, the first thing we will do is type the ‘@’ symbol that tells the parser that it is going to be doing something in code.

Читать еще:  Ошибка попробуйте еще раз

Let’s create a FOR loop specify ‘@i’ inside the curly braces, which is essentially telling Razor to put the value of i.

Run this application and you will see the following output.

Html.ActionLink как кнопка или изображение, а не ссылка

286 Kyralessa [2009-02-27 23:11:00]

В последней версии (RC1) ASP.NET MVC, как мне получить Html.ActionLink для рендеринга как кнопки или изображения вместо ссылки?

22 ответа

302 Решение Mark [2009-03-20 23:23:00]

Поздний ответ, но вы можете просто сохранить его простым и применить класс CSS к объекту htmlAttributes.

а затем создайте класс в таблице стилей

313 jslatts [2010-05-05 17:42:00]

Мне нравится использовать Url.Action() и Url.Content() следующим образом:

Строго говоря, Url.Content нужен только для прохождения, это не является частью ответа на ваш вопрос.

Благодаря @BrianLegg для указания, что это должно использовать новый синтаксис вида Razor. Пример был соответствующим образом обновлен.

75 DevDave [2012-09-20 16:43:00]

Заимствуя от Патрика ответ, я обнаружил, что должен был сделать это:

чтобы избежать вызова метода post формы.

49 agAus [2011-09-27 07:29:00]

Назовите меня упрощенным, но я просто делаю:

И вы просто заботитесь об подсветке гиперссылки. Наши пользователи любят это:)

Если вы не хотите использовать ссылку, используйте кнопку. вы также можете добавить изображение к кнопке:

type = «button» выполняет ваши действия вместо отправки формы.

Вы не можете сделать это с помощью Html.ActionLink . Вы должны использовать Url.RouteUrl и использовать URL для создания нужного элемента.

Поздний ответ, но вот как я делаю свой ActionLink кнопкой. Мы используем Bootstrap в нашем проекте, так как это делает его удобным. Не обращайте внимания на @T с момента своего использования только переводчиком.

Приведенная выше ссылка содержит ссылку, как показано ниже:

Надеюсь, что это поможет кому-то.

8 Mirko [2009-06-15 21:42:00]

Еще более поздний ответ, но я просто столкнулся с подобной проблемой и в итоге написал свою собственную ссылку на изображение HtmlHelper.

Вы можете найти его реализацию в своем блоге по ссылке выше.

Просто добавлено в случае, если кто-то ищет реализацию.

Чтобы отобразить значок со ссылкой

Сделайте то, что говорит Мехрдад, или используйте помощник url ​​из метода расширения HtmlHelper , такого как Стивен Вальтер, описывает здесь и создайте собственное расширение метод, который можно использовать для отображения всех ваших ссылок.

Тогда будет легко отобразить все ссылки в виде кнопок/якорей или в зависимости от того, что вы предпочитаете — и, самое главное, вы можете изменить свое мнение позже, когда узнаете, что на самом деле вы предпочитаете какой-либо другой способ сделать ваши ссылки.

Использование бутстрапа — это самый короткий и самый чистый подход для создания ссылки на действие контроллера, которое отображается как динамическая кнопка:

Или использовать Html-помощники:

вы можете создать свой собственный метод расширения
взгляните на мою реализацию

затем используйте его в своем представлении, посмотрите на мой вызов

1 bsayegh [2013-10-11 22:35:00]

Кажется, есть много решений о том, как создать ссылку, которая отображается как изображение, но ни одна из них не делает ее видимой кнопкой.

Есть только хороший способ, который я нашел для этого. Он немного взломан, но он работает.

Что вам нужно сделать, это создать кнопку и отдельную ссылку для действий. Сделать ссылку действия невидимой с помощью css. Когда вы нажимаете на кнопку, она может запускать событие щелчка ссылки действия.

Это может быть болью в прикладе, чтобы делать это каждый раз, когда вы добавляете ссылку, которая должна выглядеть как кнопка, но она выполняет желаемый результат.

ASP.NET MVC — Razor

In this chapter, we will look at the Razor view engine in ASP.NET MVC applications and some of the reasons why Razor exists. Razor is a markup syntax that lets you embed server-based code into web pages using C# and VB.Net. It is not a programming language. It is a server side markup language.

Razor has no ties to ASP.NET MVC because Razor is a general-purpose templating engine. You can use it anywhere to generate output like HTML. It’s just that ASP.NET MVC has implemented a view engine that allows us to use Razor inside of an MVC application to produce HTML.

You will have a template file that’s a mix of some literal text and some blocks of code. You combine that template with some data or a specific model where the template specifies where the data is supposed to appear, and then you execute the template to generate your output.

Razor Vs ASPX

Razor is very similar to how ASPX files work. ASPX files are templates, which contain literal text and some C# code that specifies where your data should appear. We execute those to generate the HTML for our application.

ASPX files have a dependency on the ASP.NET runtime to be available to parse and execute those ASPX files. Razor has no such dependencies.

Unlike ASPX files, Razor has some different design goals.

Goals

Microsoft wanted Razor to be easy to use and easy to learn, and work inside of tools like Visual Studio so that IntelliSense is available, the debugger is available, but they wanted Razor to have no ties to a specific technology, like ASP.NET or ASP.NET MVC.

If you’re familiar with the life cycle of an ASPX file, then you’re probably aware that there’s a dependency on the ASP.NET runtime to be available to parse and execute those ASPX files. Microsoft wanted Razor to be smart, to make a developer’s job easier.

Читать еще:  При обновлении гугл плей выдает ошибку

Let’s take a look at a sample code from an ASPX file, which contains some literal text. This is our HTML markup. It also contains little bits of C# code.

But these Web forms were basically repurposed by Microsoft to work with the earlier releases of MVC, meaning ASPX files were never a perfect match for MVC.

The syntax is a bit clunky when you need to transition from C# code back to HTML and from HTML code back into C# code. You are also prompted by IntelliSense to do things that just don’t make sense in an MVC project, like add directives for output caching and user controls into an ASPX view.

Now look at this code which produces the same output, the difference being it is using the Razor syntax.

With Razor syntax you can begin a bit of C# code by using the ‘@’ sign and the Razor parse will automatically switch into parsing this statement, this foreach statement, as a bit of C# code.

But when we’re finished with the foreach statement and we have our opening curly brace, we can transition from C# code into HTML without putting an explicit token in there, like the percent in the angle bracket signs.

The Razor parser is smart enough to switch between C# code and HTML and again, from HTML back into C# code when we need to place our closing curly brace here. If you compare these two blocks of code, I think you’ll agree that the Razor version is easier to read and easier to write.

Creating a View Using Razor

Let’s create a new ASP.Net MVC project.

Enter the name of project in the name field and click Ok.

To keep things simple, select the Empty option and check the MVC checkbox in the ‘Add folders and core references for’ section and click Ok. It will create a basic MVC project with minimal predefined content.

Once the project is created by Visual Studio, you will see a number of files and folders displayed in the Solution Explorer window. As we have created ASP.Net MVC project from an empty project template, so at the moment the application does not contain anything to run. Since we start with an empty application and don’t even have a single controller, let’s add a HomeController.

To add a controller right-click on the controller folder in the solution explorer and select Add → Controller. It will display the Add Scaffold dialog.

Select the MVC 5 Controller – Empty option and click Add button and then the Add Controller dialog will appear.

Set the name to HomeController and click ‘Add’ button. You will see a new C# file ‘HomeController.cs’ in the Controllers folder, which is open for editing in Visual Studio as well.

Right-click on the Index action and select Add View…

Select Empty from the Template dropdown and click Add button. Visual Studio will create an Index.cshtml file inside the View/Home folder.

Notice that Razor view has a cshtml extension. If you’re building your MVC application using Visual Basic it will be a VBHTML extension. At the top of this file is a code block that is explicitly setting this Layout property to null.

When you run this application you will see the blank webpage because we have created a View from an Empty template.

Let’s add some C# code to make things more interesting. To write some C# code inside a Razor view, the first thing we will do is type the ‘@’ symbol that tells the parser that it is going to be doing something in code.

Let’s create a FOR loop specify ‘@i’ inside the curly braces, which is essentially telling Razor to put the value of i.

Run this application and you will see the following output.

ASP.NET MVC `Html.ActionLink` between “Areas”

Posted by: admin December 21, 2017 Leave a comment

I have added a new Area to my MVC3 project and I am trying to link from the _Layout page to the new Area. I have added an Area called ‘Admin’ that has a controller ‘Meets’.

I used the visual studio designer to add the area so it has the correct area registration class etc, and the global.asax file is registering all areas.

However, when I use the following 2 action links in a page in the root, I run into a few problems:

When clicking both links, I am taken to the Meets controller in the Admin area, where the application then proceeds to throw an error saying it cannot find the Index page (even though the Index page is present in the Views folder in the Area sub-directory.

The href for the 1st link looks like this:

And the href for the 2nd link looks like this:

Also if I hit the link that I expect to be created:

I just get a resource cannot be found error. All very perplexing! I hope someone can help…

Strange indeed. Steps that worked perfectly fine for me:

  1. Create a new ASP.NET MVC 3 application using the default Visual Studio template
  2. Add an area called Admin using Visual Studio designer by right clicking on the project

Add new Controller in

Add a corresponding view

/Views/Shared/_Layout.cshtml ) add links:

Rendered HTML for the anchors:

As expected the first link works whereas the second doesn’t.

So what’s the difference with your setup?

Another option is to utilize RouteLink() instead of ActionLink(), which bypasses the area registrations altogether:

The second parameter is a “Route Name” which is registered in Global.asax.cs and in various ‘AreaRegistration’ subclasses. To use ‘RouteLink’ to link between different areas, you only need to specify the correct route name.

This following example shows how I would generate three links to different areas from a shared partial, which works correctly regardless of which area I am ‘in’ (if any):

I figured this out – I created a new test project and did exactly the same thing I was doing before and it worked…then after further inspection of all things route-related between the two projects I found a discrepancy.

In the global.asax file in my BCC application, there was a rogue line of code which had inexplicably appeared:

As you can see where my comment is, at some time or other I had placed the routes.Clear() call at the beginning of RegisterRoutes, which meant after I had registered the Areas in Application_Start, I was then immediately clearing what I had just registered.

Thanks for the help…it did ultimately lead to my salvation!

Verify that your AdminAreaRegistration class looks like this:

and that you have this in Global.asax.cs :

I solved this problem by doing the following.

In my Global.asax.cs, I have

In my PublicAreaRegistration.cs (Public Area), I’ve got

In my AuthAreaRegistration.cs (Area for Restricted access), I’ve got

And finally, my links in my *.cshtml pages would be like

Hope this saves someone hours of research! BTW, I’m talking about MVC3 here.

This might not be the case for most of the developers but I encountered this problem when I added a my first area and did not build my solution. As soon as I build my solution the links started to populate correctly.

Related Posts

Prevent taps from passing through buttons in XAML/WPF

Questions: In my project, I have a large container with a handler for taps. Inside this container, I also have a button. My goal is to handle all taps on the background container UNLESS the user click.

Send some keys to inactive window with python

Questions: I’m tryin to send some keys to inactive window/process/programm (win32/64) using python. Already read about pywinauto and SendKeys, but both of them activate window before sendin keys.

Performance Counter shows different values when ReadOnly=false

Questions: I was trying to figure out why certain performance counters aren’t updated in our production server, when I’ve hit this weird issue – the counter seems to return different.

Html actionlink mvc

221973 просмотра

4 ответа

8139 Репутация автора

Недавно я обнаружил области в ASP.NET MVC 4 , которые я успешно реализовал, но у меня возникают проблемы с @Html.ActionLink помощником в моих представлениях Razor. URL-адрес, который генерирует этот помощник, всегда, по-видимому, относится к URL-адресу текущей страницы.

У меня настроен веб-сайт в IIS 7 (Win7) в качестве виртуального каталога приложения /Foo .

У меня две зарегистрированные области: Admin и Blogs. У меня есть код по умолчанию в AdminAreaRegistration.cs и BlogsAreaRegistration.cs файлах. Я добавил namespaces = new[] < "MvcProject.Controllers" >к умолчанию по умолчанию RouteConfig:

Когда я перехожу на домашнюю страницу для своего сайта: http://localhost/Foo он правильно загружает «домашнюю» страницу для моего сайта. На этом этапе все ссылки на действия имеют свои правильные URL-адреса.

Пример кода из MvcProject/Views/Shared/_Layout.cshtml

Это корректно отображает HTML как:

Когда я провожу в браузере «Дневники», например, этот URL правильно загружает в браузере: /Foo/Blogs/Home .

Теперь ссылки в моей основной навигации меняют свои URL-адреса на:

Обратите внимание, что «Блоги /» добавляется к имени виртуального каталога IIS, так что /Foo/Blogs/Home теперь /Foo/Blogs/Blogs/Home .

Контроллеры и представления отлично обрабатываются, а просто вызовы, на @Html.ActionLink мой MvcProject/Views/Shared/_Layout.cshtml взгляд, не работают, как я ожидал.

Мне кажется, что я пропустил что-то тривиальное, но никакого поиска не было найдено. Каждое сообщение в блоге и учебник, который я нашел для реализации областей в ASP.NET MVC4, не упоминает об изменениях в том, как они @Html.ActionLink себя ведут.

Ответы (4)

15 плюса

5866 Репутация автора

Как я перенаправляю область, добавляю ее как параметр

для href-части ссылки, которую я использую

68 плюса

8139 Репутация автора

Я ненавижу отвечать на свой вопрос, но @Matt Bodily поставил меня на правильный путь.

@Html.Action Метод на самом деле вызывает контроллер и делает вид, так что не будет работать , чтобы создать фрагмент HTML в моем случае, так как это вызывает вызов рекурсивной функции , что приводит к более StackOverflowException. Это @Url.Action(action, controller, < area = "abc" >) действительно возвращает URL-адрес, но я, наконец, обнаружил перегрузку, Html.ActionLink которая обеспечила лучшее решение для моего случая:

Примечание: , null в этом случае важно, чтобы соответствовать правильной сигнатуре.

Документация для этой конкретной перегрузки:

Трудно было найти документацию для этих помощников. Я стараюсь искать «Html.ActionLink», когда мне, вероятно, придется искать «LinkExtensions.ActionLink», если это поможет кому угодно в будущем.

Все еще отмечая ответ Мэтта как ответ.

Изменить: нашел еще один помощник HTML, чтобы решить эту проблему:

2 плюса

1059 Репутация автора

Просто добавьте свой бит:
помните, что вам нужно иметь как минимум 2 области в вашем приложении MVC, чтобы получить routeValues: < area="" >работу; в противном случае значение области будет использоваться как параметр строки запроса, и ссылка будет выглядеть так: /?area=

Если у вас нет не менее 2 областей, вы можете исправить это:
1. изменить маршрут по умолчанию RouteConfig.cs следующим образом:

ИЛИ
2. Добавление фиктивной области в проект MVC.

плюса

181 Репутация автора

Ниже приведены некоторые из способов, с помощью которых вы можете создать кнопку ссылки в MVC.

Ссылка на основную публикацию
Adblock
detector