在提交之前设置一个值不会将其发送到控制器
Setting a value before the submit doesn't send it to the controller
我有一个包含多个表单的视图,每个提交都应提交一个具有特定值的隐藏字段,并且所有表单都共享相同的模型。在我的控制器中,我在渲染视图之前设置了值,但是我将需要它用于 "Post" 方法之一,其他方法应该提交相同的隐藏字段但具有不同的值。
这里我只显示带有 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"
任何帮助将不胜感激
看起来您有多个具有相同 ID 的隐藏文件,并且当您单击按钮时您的代码无法选择正确的文件。
您应该尝试在单击按钮的表单中获取确切的隐藏字段:
$(function()
{
$("#excel-upload").on("click", function (e) {
$(this).parents("form #EventCommand").val("upload-excel");
return true;
});
}
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;
}
因为 Razor 呈现的 html 对于我使用相同模型的 HiddenInput 是相同的。我将隐藏的输入放在局部视图“_HiddenFields”中,在渲染它之前,我传递了一个 ViewDataDictionary 的值。这样一来,我就可以对要生成 html 的 PartialView 施加限制。以下是想法:
@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 相同的键,它们也不起作用。
我有一个包含多个表单的视图,每个提交都应提交一个具有特定值的隐藏字段,并且所有表单都共享相同的模型。在我的控制器中,我在渲染视图之前设置了值,但是我将需要它用于 "Post" 方法之一,其他方法应该提交相同的隐藏字段但具有不同的值。
这里我只显示带有 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"
任何帮助将不胜感激
看起来您有多个具有相同 ID 的隐藏文件,并且当您单击按钮时您的代码无法选择正确的文件。 您应该尝试在单击按钮的表单中获取确切的隐藏字段:
$(function()
{
$("#excel-upload").on("click", function (e) {
$(this).parents("form #EventCommand").val("upload-excel");
return true;
});
}
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;
}
因为 Razor 呈现的 html 对于我使用相同模型的 HiddenInput 是相同的。我将隐藏的输入放在局部视图“_HiddenFields”中,在渲染它之前,我传递了一个 ViewDataDictionary 的值。这样一来,我就可以对要生成 html 的 PartialView 施加限制。以下是想法:
@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 相同的键,它们也不起作用。