ارتقاء به ASP.NET Core 1.0 - قسمت 12 - معرفی Tag Helpers
نویسنده: وحید نصیری
تاریخ: ۱۳۹۵/۰۴/۲۷ ۱۳:۳۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
{
"dependencies": {
//same as before
"Microsoft.AspNetCore.Mvc.TagHelpers": "1.0.0",
"Microsoft.AspNetCore.Razor.Runtime": "1.0.0",
"Microsoft.AspNetCore.Razor.Tools": {
"version": "1.0.0-preview2-final",
"type": "build"
}
},
"tools": {
//same as before
"Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final"
}
} <a asp-controller="Home" asp-action="Index" asp-route-id="123">Home</a>
<a asp-route="login">Login</a>
<a asp-controller="Account" asp-action="Register" asp-protocol="https" asp-host="asepecificdomain.com" asp-fragment="fragment">Register</a>
| Tag Helper | HTML Helper |
<label asp-for="Email" class="col-md-2 control-label"></label> | @Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" }) |
<a asp-controller="MyController" asp-action="MyAction" class="my-css-classname" my-attr="my-attribute">Click me</a> | @Html.ActionLink("Click me", "MyController", "MyAction",
{ @class="my-css-classname", data_my_attr="my-attribute"}) |
<input asp-for="FirstName" style="width:100px;"/> | @Html.TextBox("FirstName", Model.FirstName, new { style = "width: 100px;" }) |
<input asp-for="Email" class="form-control" /> | @Html.TextBoxFor(m => m.Email, new { @class = "form-control" }) |
<input asp-for="Password" class="form-control" /> | @Html.PasswordFor(m => m.Password, new { @class = "form-control" }) |
<input asp-for="UserName" class="form-control" /> | @Html.EditorFor(l => l.UserName,
new { htmlAttributes = new { @class = "form-control" } }) |
<form asp-controller="Account" asp-action="Register" method="post" class="form-horizontal" role="form"> | @using (Html.BeginForm("Register", "Account",
FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken() |
<span asp-validation-for="UserName" class="text-danger"></span> | @Html.ValidationMessageFor(m => m.UserName, "",
new { @class = "text-danger" }) |
<div asp-validation-summary="ValidationSummary.All" class="text-danger"></div> | @Html.ValidationSummary("", new { @class = "text-danger" }) |
<form asp-controller="Account"
asp-action="Login"
asp-route-returnurl="@ViewBag.ReturnUrl"
method="post" >
</form> <form action="/Account/Login?returnurl=%2FHome%2FAbout" method="post">
<form asp-route="login"
asp-route-returnurl="@ViewBag.ReturnUrl"
method="post" >
</form> <script asp-src-include="~/app/**/*.js"></script>
<script src="/app/app.js"></script> <script src="/app/controllers/controller1.js"></script> <script src="/app/controllers/controller2.js"></script> <script src="/app/controllers/controller3.js"></script> <script src="/app/controllers/controller4.js"></script> <script src="/app/services/service1.js"></script> <script src="/app/services/service2.js"></script>
<script asp-src-include="~/app/**/*.js"
asp-src-exclude="~/app/services/**/*.js">
</script> <link rel="stylesheet" href="//ajax.aspnetcdn.com/ajax/bootstrap/3.0.0/css/bootstrap.min.css"
asp-fallback-href="~/lib/bootstrap/css/bootstrap.min.css"
asp-fallback-test-class="hidden"
asp-fallback-test-property="visibility"
asp-fallback-test-value="hidden" />
<script src="//ajax.aspnetcdn.com/ajax/bootstrap/3.0.0/bootstrap.min.js"
asp-fallback-src="~/lib/bootstrap/js/bootstrap.min.js"
asp-fallback-test="window.jQuery">
</script> <link rel="stylesheet" href="~/css/site.min.css" asp-file-version="true"/>
<link rel="stylesheet" href="/css/site.min.css?v=UdxKHVNJA5vb1EsG9O9uURFDfEE3j1E3DgwL6NiDGMc" />
<img src="~/images/logo.png"
alt="company logo"
asp-file-version="true" /> <img src="/images/logo.png?v=W2F5D366_nQ2fQqUk3URdgWy2ZekXjHzHJaY5yaiOOk"
alt="company logo"/> <environment names="Development"> <link rel="stylesheet" href="~/css/site1.css" /> <link rel="stylesheet" href="~/css/site2.css" /> </environment> <environment names="Staging,Production"> <link rel="stylesheet" href="~/css/site.min.css" asp-file-version="true"/> </environment>
public class CustomerViewModel
{
public string Vehicle { get; set; }
public List<SelectListItem> Vehicles { get; set; } <select asp-for="Vehicle" asp-items="Model.Vehicles"> </select>
<Project Sdk="Microsoft.NET.Sdk.Web">
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.TagHelpers" Version="1.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Runtime" Version="1.1.1" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.0" />
</ItemGroup>
</Project> <partial name="_ProductPartial" asp-for="@Model[i]" />
<a asp-controller="Home" asp-action="Index" asp-route-id="123">Home</a>
<a asp-controller="User" asp-action="Edit" asp-route-id="@item.Id" asp-route-username="@item.UserName">Edit</a>
public static class CommonExtensionMethods
{
public static List<SelectListItem> CreateSelectListItem<T>(
this List<T> items,
object selectedItem = null,
bool addChooseOneItem = true,
string firstItemText = "انتخاب کنید",
string firstItemValue = 0
)
{
var modelType = items.First().GetType();
var idProperty = modelType.GetProperty("Id");
var titleProperty = modelType.GetProperty("Title");
if (idProperty is null || titleProperty is null)
throw new ArgumentNullException(
$"{typeof(T).Name} must have ```Id``` and ```Title``` propeties");
var result = new List<SelectListItem>();
if (addChooseOneItem)
result.Add(new SelectListItem(firstItemText, firstItemValue));
foreach (var item in items)
{
var id = idProperty.GetValue(item)?.ToString();
var text = titleProperty.GetValue(item)?.ToString();
var selected = selectedItem?.ToString() == id;
result.Add(new SelectListItem(text, id, selected));
}
return result;
}
} public class ShowCategory
{
public int Id { get; set; }
public string Title { get; set; }
}
public async Task<IActionResult> Add()
{
var categories = await _categoryService.AllMainCategories();
ViewBag.MainCategories = categories.ToList().CreateSelectListItem(firstItemText: "خودش سر دسته باشد");
return View();
}
[HttpPost, ValidateAntiForgeryToken]
public async Task<IActionResult> Add(AddCategoryViewModel model)
{
if (!ModelState.IsValid)
{
var categories = await _categoryService.AllMainCategories();
ViewBag.MainCategories = categories.ToList()
.CreateSelectListItem(model.ParentId, firstItemText: "خودش سر دسته باشد");
ModelState.AddModelError(string.Empty, PublicConstantStrings.ModelStateErrorMessage);
return View(model);
}
await _categoryService.AddAsync(new Category()
{
Title = model.Title,
ParentId = model.ParentId == 0 ? null : model.ParentId
});
await _uow.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}