2012-12-26 13 views
5

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.

+0

Posso vedere il tuo modello? –

+0

E il codice di azione del controllore che richiama la vista – MarkG

+0

Non c'è nulla di interessante nel modello o nel metodo di azione tranne che Id è nullable Guid. – user1068352

risposta

5

e questo spiega tutto. Stai riscontrando lo stesso problema di un'altra persona in this question. Vedere la risposta accettata e i commenti in quanto pertinente al problema.

Problemi correlati