меня Палитрами на мой взгляд, что генерируется в JavaScript в этом форматеДобавить элемент в модели с формой имени
$input = $('<input name="colorPicker" value="'+ value +'" />');
Когда я сохранить, я получить всю модель, таким образом
[HttpPost]
public ActionResult AjoutHospitalisation(string ufsCode, DateTime dateDebutCalendrier, DateTime dateFinCalendrier,
GPL_Hospitalisation model, FormCollection collection)
и внутри я установить модель с формой результата
if (collection["colorPicker"] != null)
{
model.PastilleColor = collection["colorPicker"].ToString();
}
Services.SvcHospitalisation.InsertOrUpdateHospitalisation(model, this.GetIntervenantId());
это работает хорошо, но это, кажется, не правильно. Я хочу, чтобы изменения имели автоматический процесс и не добавляли FormCollection. Я попробовал с CustomModelBinder, но мне нужно переписать все мои привязки к модели:/ Возможно ли «расширить» связующее для модели, чтобы добавить только некоторые поля, или я совершенно ошибочен в методе для достижения этой цели?
Заранее спасибо.
EDIT: Чтобы быть более точным, здесь полный частичный вид
<div class="color">
<label>Pastille du patient</label>
<div class="picker"></div>
<input id="addColorPicker" class="add" type="button" value="Ajouter" />
</div>
<script type="text/javascript">
$.fn.colorPicker.defaults.colors = ['FF0000', 'FF8000', 'FFFF00', '40FF00', '0080FF', '000000'];
function addPicker(value) {
var $input;
if (value != null)
$input = $('<input name="PastilleColor" value="' + value + '" />');
else
$input = $('<input name="PastilleColor" />');
$(".picker").append($input);
$input.colorPicker({ showHexField: false });
}
function removePicker(value) {
var input = value.format('input');
var picker = value.format('picker');
var palette = value.format('palette');
$('#' + palette).hide();
$('#' + picker).remove();
$('#' + input).remove();
}
$(function() {
if ("@(ViewBag.ColorPicker)" != "")
{
var str = "@(ViewBag.ColorPicker)".split(',');
$.each(str, function(index, value) {
addPicker(value);
});
}
$("#addColorPicker").click(function() { return addPicker(); });
});
</script>
когда я отправить почту я отправляю с этим методом
$.ajax({
url: EasilyRelativeUrl("Hospitalisation/AjoutHospitalisation"),
data: $('form').serialize(),
type: 'POST',
dataType: 'json'
}).done(function (data) { ... }
И с Fiddler я вижу хорошо «PastilleColor =% 23ff0000 & PastilleColor =% 23ffff00 ".
Если я не пройду, установив Model с FormCollection, у меня есть только первый PastilleColor в model.PastilleColor, а не эта строка «ff0000, ffff00». У меня есть этот формат для сериализации цвета в SQL, потому что я не знаю, сколько цветов требуется клиенту.
И это хорошо работает с
if (collection["PastilleColor"] != null)
{
model.PastilleColor = collection["PastilleColor"].ToString();
}
поэтому мне нужно иметь «связующее», если у меня есть много полей для преобразования в 1 поле.
Почему вы не можете изменить свое имя входа в PastilleColor? –
Я попробовал. Но это атрибут name, а не id, он не работает. И атрибут идентификатора не может быть установлен, потому что у меня может быть один-много выбора цвета, и он сохраняется внутри одного поля, поскольку они поступают по запросу http. –
Но на самом деле mvc model binder сравнивает атрибут имени с именем свойства модели. Поэтому, если вы измените имя ввода на: PastilleColor и поместите строку PastilleColor в параметры действия, она должна работать. –