假设我们有一个编辑表单来创建新用户。现在,保存按钮被放置在页脚的不同部分。
我的问题是我无法在一个表单中获取编辑字段和保存按钮,因为该按钮位于不同的部分。
因此,我无法提交表格。
解决此问题的最佳方法是什么?
_Layout.cshtml
<div class="content">
@RenderBody()
</div>
<div class="footer">
@RenderSection("Footer")
</div>
Index.cshtml
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@section Footer
{
<input type="submit" value="Save" />
}
@using(Html.BeginForm())
{
<h2>New User</h2>
@Html.EditorForModel()
}
答案 0 :(得分:2)
您可以明确地调用form.Dispose()
,而不是using
语句:
@{ var form = Html.BeginForm() }
<h2>New User</h2>
@Html.EditorForModel()
@section Footer
{
<input type="submit" value="Save" />
@{ form.Dispose(); }
}
修改强>
但是你必须至少确保Body和Footer部分在同一个容器中,例如:
<div class="content">
@RenderBody()
<div class="footer">
@RenderSection("Footer")
</div>
</div>
使用问题中所写的布局,content
div(以及form
标记)必须在submit
按钮出现之前关闭。这在逻辑上是行不通的:
<div class="content">
@RenderBody() @@ form opens, and therefore must close here
</div>
<div class="footer">
@RenderSection("Footer") @@ submit button is here -- can never be inside the form
</div>
编辑旁边:将表单拆分为多个部分视图似乎是一个非常糟糕的主意。你可能会把它称为代码味道 - 如果可能的话,我会尽量避免它。
答案 1 :(得分:1)
你发现了一个非常尴尬的工作。我建议这样做:
public string Action { get; set; }
<form id="my-form">
@Html.HiddenFor(x => x.Action)
...
</form>
<button class="btn-submit" value="action1">Submit</button>
<button class="btn-submit" value="action2">Submit</button>
$('.btn-submit').live('click', function() {
// update value of hidden input inside the form
$('#Action').val($(this.val()));
// submit the form
$('#my-form').submit();
});
public ActionResult WahteverAction(WhateverModel model)
{
if(ModelState.IsValid)
{
if(model.Action == "action1")
{
// do whatever needs to be done for action1
}
if(model.Action == "action2")
{
// do whatever needs to be done for action2
}
}
return View();
}
答案 2 :(得分:0)
我找到了解决问题的方法。这不好,但它确实有效。
我用锚点替换了提交按钮。单击锚点时,将调用javascript函数。
<a name="save" onclick="submitAction(this)"></a>
javascript函数在表单中创建一个隐藏的提交按钮并单击它。
function submitAction(sender) {
var action = $(sender).attr('name');
$('form').append('<input type="submit" style="display:none" id="tmpSubmit" />');
$('#tmpSubmit').attr('name', action);
$('#tmpSubmit').click();
}