0

У меня есть представление с многократными формами, каждый из которых должен отправить скрытое поле со специальным значением, а весь общий ресурс - с той же моделью. Из моего контроллера я устанавливаю значение перед рендерингом представления, но это значение мне понадобится для одного из методов «Опубликовать», остальные должны отправить одно и то же скрытое поле, но с другим значением.Установка значения перед отправкой не отправляется на контроллер

Здесь я отображая только вторую форму представления с hiddenInput EventCommand

@using (Html.BeginForm("ContinueWithUpload", "Odometer", FormMethod.Post, new { id = "form2" })) 
{ 
    @Html.HiddenFor(m => m.EventCommand) 
    <div> 
     <button type="submit" name="upload-excel" value="upload-excel" id="excel-upload" class="btn btn-success">Continue Upload</button> 
    </div> 
} 

до сих пор я пытался установить его в JavaScript, но он не работает

$(function(){ 
    $("#excel-upload").on("click", function (e) { 
     $("#EventCommand").val("upload-excel"); 
    }); 
} 

прочитав о том, как это сделать, я нашел решения с ViewData, но также с этим обходным решением он не работает

@Html.HiddenFor(m => m.EventCommand) 
ViewData["EventCommand"] = "upload-excel" 

Любая помощь будет оценена

+0

Вы сохраняете ценность? Попробуйте 'var value = $ (" # EventCommand "). Val (" upload-excel ");' – nurdyguy

+0

Непонятно, что вы пытаетесь сделать здесь. Зачем вам нужен скрипт для установки значения скрытого ввода - просто установите значение свойства EventCommand в контроллере, прежде чем передать модель в представление –

+0

Я не могу, потому что у меня есть одинаковые формы представлений , и в той же модели, поэтому для одного из разделов EvenCommand имеет значение, которое поступает от контроллера, а для другого мне нужно отправить другой файл – Heinrich

ответ

0

Поскольку HTML, что делает Razor то же самое для моего HiddenInput с использованием той же модели. Я поместил свои скрытые входы в Partial View «_HiddenFields», и перед его рендерингом передал значение ViewDataDictionary. Благодаря этому это позволило мне ограничить PartialView, из которого html я хотел бы сгенерировать. Ниже идея:

@using (Html.BeginForm("ContinueWithUpload", "Odometer", FormMethod.Post, new { id = "form2" })) 
{ 
    @Html.Partial("HiddenFields/_HiddenFields", Model, new ViewDataDictionary { { "EventCommand", "excel-upload"} }) 
} 

и мой частичный вид, как это

@if ((string)Html.ViewData["EventCommand"] == "excel-upload") 
{ 
    @*@Html.HiddenFor(m => m.EventCommand)*@ 
    @*@Html.HiddenFor(m => m.EventCommand, new {@value = "excel-upload"})*@ 
    <input id="EventCommand" name="EventCommand" type="hidden" value="excel-upload" /> 
} 
else 
{ 
    @Html.HiddenFor(m => m.EventCommand) 
} 

, если вы видите, что я заметил первые две строчки, потому что оба они не работают, даже если ViewData имеет тот же ключ, что и поле EventCommand.

1

Похоже, у вас есть несколько скрытых fileds с одинаковыми идентификаторами и ваш код не в состоянии выбрать правильный при нажатии на кнопку. Вы должны стараться, чтобы получить точное скрытое поле в том виде, в котором нажата кнопка:

$(function() 
{  
    $("#excel-upload").on("click", function (e) { 
     $(this).parents("form #EventCommand").val("upload-excel"); 
     return true; 
    }); 
} 
0
Use following code: 

@using (Html.BeginForm("ContinueWithUpload", "Odometer", FormMethod.Post, new { id = "form2",onsubmit = "return myJsFunction(this)" })) 
{ 
    @Html.HiddenFor(m => m.EventCommand) 
    <div> 
     <button type="submit" name="upload-excel" value="upload-excel" id="excel-upload" class="btn btn-success">Continue Upload</button> 
    </div> 
} 


Add following javascript function: 

function myJsFunction(this) 
{ 
$(this).find('#EventCommand').val("upload-excel"); 
     return true; 
}