在提交之前设置值不会将其发送到控制器

时间:2017-01-20 22:15:01

标签: asp.net asp.net-mvc asp.net-mvc-4 model-binding defaultmodelbinder

我有一个带有倍数形式的视图,每个提交应该提交一个具有特定值的隐藏字段,并且所有共享都是相同的模型。从我的控制器中我在渲染视图之前设置了值,但是这个值我将需要它用于其中一个" 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"

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:1)

看起来你有多个具有相同ID的隐藏文件,当你点击按钮时你的代码无法选择正确的文件。 您应该尝试在单击按钮的表单中获取确切的隐藏字段:

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

答案 1 :(得分: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;
}

答案 2 :(得分:0)

因为Razor呈现的html对于使用相同模型的HiddenInput是相同的。我将隐藏的输入放在Partial View&#34; _HiddenFields&#34;在渲染之前,我传递了一个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具有相同的密钥,它们都不起作用。