2014-07-09 9 views
5

Impostazione ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix sarà anteporre tutte nameeid attributi.Set HtmlFieldPrefix per id, ma non il nome

Mi chiedo se c'è un modo per prefissare solo il id e lasciare il name da solo.

Lo scenario è questo: una vista parziale viene caricata da AJAX più volte su una pagina. Una libreria JavaScript che stiamo usando richiede l'uso di id s ma vogliamo anche poter pubblicare i moduli (quindi gli name s devono corrispondere al modello del server).

nostra soluzione attuale è quella di generare un numero univoco per ogni tempo della vista parziale viene caricato, impostare il HtmlFieldPrefix a items[n] (dove n è il numero generato) e per la nostra azione per ricevere una serie di items (dove ci basta per riceverne uno). Questo ci dà un id unico al mondo e uno name che può essere analizzato dal raccoglitore del modello.

Questo sembra brutto, però. Eventuali suggerimenti?

risposta

2

Ho avuto lo stesso problema di te stesso.

@{ ViewData.TemplateInfo.HtmlFieldPrefix = "Prefix"; } 
@using(Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 
    @Html.TextBoxFor(m => m.MerchantAccount.MerchantName, new { maxlength = 29, size = 35 })<br /> 
    @Html.ValidationMessageFor(m => m.MerchantAccount.MerchantName) 
} 

In primo luogo, la mia cattiva idea: utilizzare jQuery al caricamento della pagina per rimuovere il prefisso indesiderato a tutti i nomi.

$('[id*="Prefix_']).each(function(i, e) {...

Quello che in realtà finito per fare è stato suggerito qui: https://stackoverflow.com/a/1318342/4946681

In sostanza, sul controller dichiarate quale prefisso a striscia (specificando un prefisso legano nella firma del metodo) ed è fatta per automaticamente

Ora possiamo avere i nostri prefissi ID e anche mangiare (legarli)!

Problemi correlati