大家好我有ajax我有一些数据和控制器动作方法...我需要将数据发送到控制器动作方法...当我这样做时它在我的控制器方法中有空值,可以任何人都纠正我在哪里做的事情......
<script type="text/javascript">
$(document).ready(function () {
$("#butValidateForm").click(function () {
UpdateMethod();
})
});
function UpdateMethod() {
var s = document.getElementById("EmployeeID");
var selecteditem1 = s.options[s.selectedIndex].value;
var a = document.getElementById("FromStatusId");
var selecteditem6 = a.options[a.selectedIndex].value;
var data = '{"AssignTo":"' + selecteditem1 + '","Status":"' + selecteditem6 + '"}';
alert(data);
$.ajax({
type: "POST",
url: "/ViewBug/Update/",
enctype: 'multipart/form-data',
data: data,
success: function () {
}
});
}
</script>
我的控制器操作方法
[HttpPost]
public ActionResult Update(BugModel model, FormCollection form, string selecteditem1, string selecteditem6)
{
if (Session["CaptureData"] == null)
{
}
else
{
model = (BugModel)Session["CaptureData"];
}
ViewBag.AssignTo = new SelectList(GetEmployee(), "EmployeeID", "EmployeeName");
ViewBag.Status = new SelectList(GetFromStatus(), "FromStatusId", "FromStatus");
using (SqlConnection conn = new SqlConnection(connString))
{
SqlCommand cmd = new SqlCommand("sp_history", conn);
cmd.CommandType = CommandType.StoredProcedure;
conn.Open();
cmd.Parameters.Add("@Title", SqlDbType.VarChar).Value = model.Title;
cmd.Parameters.Add("@FixedById", SqlDbType.VarChar).Value = model.LoginName;
cmd.Parameters.Add("@AssignedId", SqlDbType.Int).Value = model.AssignTo;
cmd.Parameters.Add("@Resolution", SqlDbType.VarChar).Value = model.Resolution;
cmd.Parameters.Add("@FromStatus", SqlDbType.VarChar).Value =model.Status;
string fileName = string.Empty;
string StrFilePath = string.Empty;
foreach (BugAttachment objList in model.ListFile)
{
if (string.IsNullOrEmpty(StrFilePath))
{
fileName = objList.AttachmentName;
StrFilePath = objList.AttachmentUrl;
}
else
{
fileName = fileName + "," + objList.AttachmentName;
StrFilePath = StrFilePath + "," + objList.AttachmentUrl;
}
}
cmd.Parameters.Add("@AttachmentName", SqlDbType.VarChar).Value = fileName;
cmd.Parameters.Add("@BugAttachmentUrl", SqlDbType.VarChar).Value = StrFilePath;
cmd.Parameters.Add("@AttachedBy", SqlDbType.VarChar).Value = model.LoginName;
cmd.ExecuteNonQuery();
conn.Close();
}
return View("Edit");
}
答案 0 :(得分:4)
而不是
public ActionResult Update(BugModel model, FormCollection form, string selecteditem1, string selecteditem6)
尝试一下:
public ActionResult Update(BugModel model, FormCollection form, string AssignTo, string Status)
您需要使用您在发送回的对象中使用的属性的名称,因为您已将其命名为AssignTo和Status。希望这会有所帮助。
编辑:
尝试发送这样的对象:
var data ={};
data.AssignTo = selectedvalue1;
data.Status = selectedvalue6;
看看是否有任何区别。如果您仍有问题,可以在firebug /开发人员工具中检查请求吗?
答案 1 :(得分:4)
试试这个:
var data = { AssignTo: selecteditem1, Status: selecteditem6 };
另外,根据亨利的回答,使用签名:
public ActionResult Update(BugModel model,
FormCollection form,
string AssignTo,
string Status)
那么,你当然应该能够从form[]
集合中获得所需的两个值,因为你在幕后做了HttpPost
:
(即var assignTo = form["AssignTo"];
等)。
[编辑] - 出于好奇,我可以问为什么要将jquery语法与更传统的javascript对象语法混合搭配。一个例子是你得到EmployeeID
选项的值?为什么不使用var selecteditem1 = $('#EmployeeID').val();
。
我还注意到ViewBag对象在HttpPost
操作中得到了更新。您是否希望能够在返回视图时使用它 - 当然不是(不管是否在ajax请求方面)。快速解释我的好奇心会很棒。在我看来,你试图用这个动作做太多(当然,保持干燥 - 但是)我担心你最终会进入一个角落,看起来你正在建造不同的入口点起来。我建议一个温和的倒带,只是为了让事情更加集中,每个行动都有一个责任。
答案 2 :(得分:0)
我最终做了以下事情:
<script type="text/javascript">
$(document).ready(function () {
$("#butValidateForm").click(function () {
UpdateMethod();
})
});
function UpdateMethod() {
var s = document.getElementById("EmployeeID");
var selecteditem1 = s.options[s.selectedIndex].value;
var a = document.getElementById("FromStatusId");
var selecteditem6 = a.options[a.selectedIndex].value;
// var data = '{AssignTo:' + selecteditem1 + '}';
// alert(data);
var AssignTo;
var Title;
Title=$("#Title").val();
var FixedBy;
FixedBy = $("#LoginName").val();
var Resolution;
Resolution = $("#Resolution").val();
var Status;
Status = $("#FromStatusId").val();
$.ajax({
type: "POST",
url: "/ViewBug/Update/",
enctype: 'multipart/form-data',
data: {AssignTo:selecteditem1,Title:Title,FixedBy:FixedBy,Resolution:Resolution,Status:Status},
success: function () {
}
});
}
</script>