voglio avere un campo di input (nascosto) che memorizza Id di una qualche entità ...input nascosto mostra Id errato (Guid.Empty)
Ma questo codice:
@Html.HiddenFor(model => model.Id)
Risultati in questo HTML markup:
<input id="Id" name="Id" type="hidden" value="00000000-0000-0000-0000-000000000000" />
Questo è strano dato che io sono sicuro che Model.Id != Guid.Empty
. Posso confermarlo iniettando @Model.Id
in HTML. Funziona bene:
<input type="hidden" id="Id" name="Id" value="@Model.Id" />
Perché View Engine decide di inserire questi zeri anziché l'ID corretto?
Modifica: non ho aggiunto codice originale, perché è abbastanza complicato ma qui è super semplice esempio che mostra quasi lo stesso comportamento (che utilizza una stringa vuota non Guid.Empty nel valore di ingresso):
vista:
@using MvcApplication4.Models
@model Foo
@using (Html.BeginForm())
{
@Html.HiddenFor(model => model.Id)
@Model.Id
<input type="submit" value="ok" />
}
controller:
namespace MvcApplication4.Controllers
{
public class HomeController : Controller
{
[HttpGet]
public ActionResult Index()
{
Foo foo = new Foo();
return View(foo);
}
[HttpPost]
public ActionResult Index(Foo foo)
{
foo.Id = Guid.NewGuid();
return View(foo);
}
}
}
Modello:
using System;
namespace MvcApplication4.Models
{
public class Foo
{
public Guid? Id { get; set; }
}
}
Il problema è ovviamente visibile dopo l'azione post.
Posso vedere il tuo modello? –
E il codice di azione del controllore che richiama la vista – MarkG
Non c'è nulla di interessante nel modello o nel metodo di azione tranne che Id è nullable Guid. – user1068352