在我尝试解释我的问题时,请耐心等待我。
我将我的表单发布回控制器并更新模型并将其传递回视图。如果我使用提交按钮,这可以正常工作,但如果我使用非提交按钮并尝试使用 javascript 回发,则无法正常工作。
我试过寻找这个问题,但我不知道如何措辞,所以我可以得到任何接近它的结果。
基本上
正确 - 当我单击输入类型 =“提交”的 AddDetail 按钮时,我的控制器被调用,模型被更新并传递回视图,元素正确显示在页面上。
错误 - 当我单击输入类型 =“按钮”的 AddDetail1 按钮时,单击按钮时调用我的 javascript,调用控制器方法,将 FormCollection 和模型正确传递到控制器中。模型得到更新并传回视图,但页面上没有显示任何元素。
我已经将这段代码单步执行了 100 次,我看到的一切都与视图中设置的元素完全相同。唯一的区别是提交按钮将呈现控件,但其他按钮不会呈现任何内容。我在点击每个按钮后查看了 html 源代码,并且提交按钮显示了控件,但是当我单击其他按钮时没有控件。
我什至在页面上添加了一个@Model.cases.count - 最初它显示 0 是正确的,但在回发后它显示 1 用于提交按钮,当我单步执行另一个按钮的代码时,它显示 1 ,但是当页面最终完成并呈现所有内容时,它显示为 0,即使在我单步执行代码时它是 1。
非常令人沮丧
任何想法将不胜感激。
这是我的简化视图
@model CASA.ViewModels.CaseViewModel
<script type="text/javascript">
$(function () {
$("#AddDetail1").click(function () {
var form = $(':input');
//var action = form.attr("action");
var serializedForm = form.serialize();
var url = '@Url.Action("CreateCase")';
//$.post(url, serializedForm);
$.ajax({
url: url,
data: serializedForm,
type: 'POST',
success: function (response) {
alert(response);
// process the results from the controller action
// window.location.href = response.Url;
}
});
});
});
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
@if (Model.cases != null && Model.cases.Count > 0)
{
for (int i = 0; i < Model.cases.Count; i++)
{
<tr>
<td>
@Html.TextBoxFor(m => m.cases[i].CaseNumber, new { @class = "textbox" })
</td>
<td>
@Html.TextBoxFor(m => m.cases[i].FirstName, new { @class = "nameTextbox" })
</td>
<td>
@Html.TextBoxFor(m => m.cases[i].LastName, new { @class = "nameTextbox" })
</td>
<td>
@Html.EditorFor(m => m.cases[i].DOB)
</td>
<td>
@Html.RadioButtonListFor(m => m.cases[i].Sex, Model.radiobuttons.RadioButtonListItems)
</td>
</tr>
}
}
<input type="submit" value="+" id="AddDetail" class="button" />
<input type="button" value="+" id="AddDetail1" class="button" />
}
这是我的控制器:
[HttpPost]
public ActionResult CreateCase(FormCollection collection, CaseViewModel model)
{
if (ModelState.IsValid)
{
model.cases.Add(new CASA_Cases
{
CaseNumber = collection["CaseNumber"],
FirstName = collection["FirstName"],
LastName = collection["LastName"],
DOB = Convert.ToDateTime(collection["DOB"]),
Sex = collection["Sex"]
});
UpdateModel(model);
if (submit.Count() > 0)
{
model.cases.ForEach(item =>
{
if (model.group.ID == null)
{
model.group.ID = Guid.NewGuid();
model.group.UserID = Utilities.Utilities.GetUserID;
}
item.CASA_CaseGroups_ID = model.group.ID;
});
}
}
return View(model);
}