Livre, Professional ASP.NET MVC 1.0

Professional ASP.NET MVC 1.0

J’ai terminé de lire ce bookin y a déjà un mois … un mois que je dois écrire ce post.

Dans l’ensemble le livre est plutôt bon, même si je le conseil plutôt à des débutant en ASP.NET MVC. J’ai bien aimé le premier chapitre qui est un step by step de la création de http://www.nerddinner.com/. le Chapitre 9 à aussi sont importance, c’est l’essentiel de la sécurité d’une app MVC. Il faut le lire car beaucoup de résponsabilité sont maintenant délégué à/aux développeur(s).

Ma note : 3.5/5

Voici une rapide liste des points important que j’en ai tiré :

AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection formValues)
{
    // code to Retrieve
    // code to Update with form posted values
    // Persist changes back to database

    // Perform HTTP redirect to details page
	return RedirectToAction("Details", id);
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection formValues)
{
    Product product = productRepository.GetProduct(id);
    try
    {
        UpdateModel(product);
        productRepository.Save();
        return RedirectToAction("Details", new { id=product.ID });
    }
    catch
    {
        foreach (var issue in product.GetRuleViolations()) {
        ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
    	}
    return View(dinner);
	}
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Include="Name,Description")] Product product)
{
	//...
}
public class ProductFormViewModel
{

    // Properties
    public Product Product { get; private set; }
    public SelectList Categories { get; private set; }

    // Constructor
    public ProductFormViewModel(Dinner dinner)
    {
        Product = product;
        Categories = new SelectList(allCategories, Product.Category);
	}
}
public ActionResult Index(int? page) {

const int pageSize = 10;

var products = productRepository.FindAll();

var paginatedProducts = products.Skip((page ?? 0) * pageSize)
.Take(pageSize)
.ToList();

return View(paginatedProducts);
}
[Authorize(Roles="admin")]
public ActionResult Create() {
...
}
[AcceptVerbs(HttpVerbs.Post), Authorize]
public ActionResult Edit(Product product)
{
...
product.EditedBy = User.Identity.Name;
...
}
// In Controller
[Authorize, AcceptVerbs(HttpVerbs.Post)]
public ActionResult Alert(int id)
{
// code here...
return Content("Thanks - we'll be alerted!");
}

// In view
<%= Ajax.ActionLink( "Alert me when product price change",
"Alert", "Product",
new { id=Model.ID },
new AjaxOptions { UpdateTargetId="idDIV",OnSuccess="AnimateMessage"})
%>

<script type="text/javascript">

function AnimateMessage() {
$("#idDIV").animate({fontSize: "1.5em"},400);
}

</script>
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SearchByLocation(float longitude, float latitude)
{
var products = ProductRepository.FindByLocation(latitude,longitude);
//.. can add a select here or use viewmodel
return Json(products.ToList());
}
[HandleError(ExceptionType = typeof(NullReferenceException),
View = "NullError")]
[HandleError(ExceptionType = typeof(SecurityException),
View = "SecurityError")]
public class HomeController : Controller
{
public ActionResult Index()
{
throw new NullReferenceException();
}

public ActionResult About()
{
return View();
}
}

Bon je m’arrête là, ça fait déjà pas mal ! Peut être un prochain post sur la sécurité avec MVC.