Tag Helper w MVC6 oraz FluentValidation. DSP16 – część 15

Podczas implementacji chciałem użyć FluentValidation o którym to wspominałem już w poprzednim poście. Zamarzyło mi się użyć go zgodnie tym co jest napisane na wiki projektu. Okazało się, że FluentValidation nie jest dostosowany do MVC6. Cała dyskusja nad dostosowaniem tego projektu do ASP.NET Core znajduje się githubie projektu. Sama w sobie biblioteka działa elegancko.

var validation = new PlayerValidation();
var result = validation.Validate(player);
if (result.IsValid)
{
	unitOfWork.Players.Add(player);
	unitOfWork.Complete();
}

Mam jedną uwagę na temat dodawania biblioteki do projektu w ASP.NET Core. DLLkę FluentValidation dodałem przez Manage NuGeta Packages. W pliku project.json zaszła automatyczna zmiana:

"dnx451": {
  "dependencies": {
   "FluentValidation": "6.2.1"
  }

Do dnx541 została dodana referencja do tej biblioteki. Jednakże w projekcie nie potrafiłem nigdzie dodać usinga do tej biblioteki. Rozwiązanie jest bardzo proste. Referencje to biblioteki trzeba dodać do głównych zależności w projekcie.

{
  "version": "1.0.0-*",
  "compilationOptions": {
    "emitEntryPoint": true
  },

  "dependencies": {
    ...
    "FluentValidation": "6.2.1"
  },
  ...
}

 

Warto również zwrócić uwagę na to, że w ASP.NET MVC6 pisanie front-endu wygląda trochę inaczej. W MVC5 korzystaliśmy głównie z Html Helpera, w MVC 6 korzystamy z Tag Helpera.

Różnica?

Html Helper:

<div class="form-horizontal">
	<h4>Person</h4>
	<hr />
	@Html.ValidationSummary(true, "", new { @class = "text-danger" })
	<div class="form-group">
		@Html.LabelFor(model => model.FirstName, htmlAttributes: new { @class = "control-label col-md-2" })
		<div class="col-md-10">
			@Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { @class = "form-control" } })
			@Html.ValidationMessageFor(model => model.FirstName, "", new { @class = "text-danger" })
		</div>
	</div>

	<div class="form-group">
		@Html.LabelFor(model => model.LastName, htmlAttributes: new { @class = "control-label col-md-2" })
		<div class="col-md-10">
			@Html.EditorFor(model => model.LastName, new { htmlAttributes = new { @class = "form-control" } })
			@Html.ValidationMessageFor(model => model.LastName, "", new { @class = "text-danger" })
		</div>
	</div>

	<div class="form-group">
		<div class="col-md-offset-2 col-md-10">
			<input type="submit" value="Create" class="btn btn-default" />
		</div>
	</div>
</div>

Tag Helper:

<div class="form-horizontal">
	<h4>Person</h4>
	<hr />
	<div asp-validation-summary="ValidationSummary.ModelOnly" class="text-danger"></div>
	<div class="form-group">
		<label asp-for="FirstName" class="col-md-2 control-label"></label>
		<div class="col-md-10">
			<input asp-for="FirstName" class="form-control" />
			<span asp-validation-for="FirstName" class="text-danger" />
		</div>
	</div>

	<div class="form-group">
		<label asp-for="LastName" class="col-md-2 control-label"></label>
		<div class="col-md-10">
			<input asp-for="LastName" class="form-control" />
			<span asp-validation-for="LastName" class="text-danger" />
		</div>
	</div>

	<div class="form-group">
		<div class="col-md-offset-2 col-md-10">
			<input type="submit" value="Create" class="btn btn-default" />
		</div>
	</div>
</div>

Dla mnie Tag Helper jest bardziej czytelny. Żeby uaktywnić Tag Helper należy w pliku project.json dodać do ogólnych dependencies:

{
  ...

  "dependencies": {
    ...
    "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
    ...
  },

  ...
}

oraz do pliku _ViewImports.cshtml

@using PokerWebsite
@addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"

 

Leave a Comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *