查看控制器数据传递
view to controller data passing
当我 select 下拉列表 selected 下拉列表值未出现在控制器操作方法中时。 selected 值在 ajax 中绑定但在控制器操作方法中未绑定
see our page
<div class="row">
<div class="col-lg-3">
<fieldset class="form-group">
<label class="form-label semibold control-label">Generic</label>
@Html.DropDownList("MasterGenericID", null, "--- Select Generic ---", new { @class = "select2-arrow" })
</fieldset>
</div>
$('#btnsearch').click(function() {
var genericID = $('#MasterGenericID').val();
$.ajax({
type: 'POST',
url: "@Url.Action("ProductMasterController", "ProductMasterview")",
data: JSON.stringify(GenericID),
contentType: "application/json",
dataType: 'json',
success: function(data) {
// if (response.id > 0)
alert("test" + data.GenericID);
},
async: true // make it true if you want to make an async call.
});
});
public ActionResult ProductMasterview(string GenericID)
if (Convert.ToInt32(GenericID) > 0)
{
return View(dPMSP.GetAllProductsUsingGenericID(GenericID));
}
else
{
Generic_Bind();
Therapeutic_Bind();
SubTherapeutic_Bind();
Formulation_Bind();
return View(dPMSP.GetAllProducts());
}
}
Error page
谢谢
您直接将值传递给 ajax 调用,您应该传递具有 GenericID 属性
的对象
示例-
$('#btnsearch').click(function () {
var value = $('#MasterGenericID').val();
var data = {
GenericID: value
};
$.ajax({
type: 'POST',
url: "@Url.Action("ProductMasterview", "ProductMaster")",
data: JSON.stringify(data),
contentType: "application/json",
dataType: 'json',
success: function(data) {
// if (response.id > 0)
alert("test" + data.GenericID);
},
async: true // make it true if you want to make an async call.
});
});
js应该是这样的
$('#btnsearch').click(function() {
var genericID = $('#MasterGenericID').val();
var postData={
GenericID:genericID
};
$.ajax({
type: 'POST',
url: '@Url.Action("ProductMasterController", "ProductMasterview")',
data: postData,
dataType: 'json',
success: function(data) {
// if (response.id > 0)
alert("test" + data.GenericID);
},
error: function(xhr, ajaxOptions, thrownError) {
alert('Failed to delete');
}
});
});
并且 C# 代码应该如下所示
[HttpPost]
public ActionResult ProductMasterview(string GenericID)
{
if (Convert.ToInt32(GenericID) > 0)
{
//return View(dPMSP.GetAllProductsUsingGenericID(GenericID));
//you can return only the genericId as you expect it at ajax success
return Json(new { GenericID = yourGenericId});
}
else
{
Generic_Bind();
Therapeutic_Bind();
SubTherapeutic_Bind();
Formulation_Bind();
//return View(dPMSP.GetAllProducts());
//you can return only the genericId as you expect it at ajax success
return Json(new { GenericID = yourGenericId});
}
}
您的代码有很多问题。
看看这条线
data: JSON.stringify(GenericID),
您正在使用一个变量 GenericID
,但它没有在任何地方定义。请记住 javascript 区分大小写 。因此,请确保您使用的大小写正确。
现在看看这一行
url: '@Url.Action("ProductMasterController", "ProductMasterview")',
您未正确使用 Url.Action
辅助方法。如果您使用的重载有两个参数,第一个参数应该是动作名称,第二个应该是控制器名称。您也不需要 Controller
后缀。所以应该是
url: "@Url.Action("ProductMasterview", "ProductMaster")",
我注意到的另一个问题是,您将 ajax 调用的数据类型 属性 指定为 json
。 $.ajax
方法使用此 属性 值来解析来自服务器的数据。此处您告诉 $.ajax
您期望来自服务器的 JSON 响应。但是您的操作方法是 return 查看结果,它是 HTML/Plain 文本,而不是 JSON。因此您的代码将无法按预期工作。
我还看到您正在进行 POST 调用,但您的操作方法未使用 HttpPost 属性修饰。所以你的 ajax 调用不会命中 action 方法。从你的问题中也不清楚你想要什么类型的数据 return.(JSON / View result-HTML).
如果您正在 return 查看结果(html 标记),您应该 return 查看部分视图结果,以便您可以使用它来更新部分视图你的 DOM。
如果您正在 return 浏览整个视图,那么进行 ajax 调用是没有意义的(当我看到 [=21] 中的 4 个方法调用时,我觉得您正在尝试这样做=] 部分在您的操作方法代码中)。
还要使用正确的数据类型。如果要传递数值,请使用数字类型(int
或 long
),而不是使用 string
作为参数并稍后进行转换。请记住,当您传递给它的值无法安全地转换为 int 时,Convert.ToInt32
会抛出异常(例如:12abc
)。
使用int
作为参数类型。
public ActionResult ProductMasterview(int genericId)
{
// some other logic you want to do .
return PartialView(dPMSP.GetAllProductsUsingGenericID(genericId));
}
您应该更新 GetAllProductsUsingGenericID
方法以也采用 int 类型,而不是字符串。
现在在您的客户端,您可以在数据中传递选定的选项值属性。由于您的操作方法未使用 HttpPost 属性修饰,因此只需使用 GET($.ajax
的默认类型)。同时在 js object 中发送选定的选项值,键与您的操作方法参数名称匹配。
$('#btnsearch').click(function() {
var id = $('#MasterGenericID').val();
$.ajax({
url: "@Url.Action("ProductMasterview", "ProductMaster")",
data: { genericId: id }
}).done(function(response) {
console.log('Received response from server');
console.log(response);
// If you want to update the DOM with the response
// Ex : $("#SomeDomElementId").html(response);
}).fail(function(x, a, e) {
alert(e);
});
});
如果您想从您的操作方法中 return JSON,那很好。您不必一定要指定 dataType
属性,因为 jQuery 会尝试根据响应 headers 智能地猜测它。
当我 select 下拉列表 selected 下拉列表值未出现在控制器操作方法中时。 selected 值在 ajax 中绑定但在控制器操作方法中未绑定 see our page
<div class="row">
<div class="col-lg-3">
<fieldset class="form-group">
<label class="form-label semibold control-label">Generic</label>
@Html.DropDownList("MasterGenericID", null, "--- Select Generic ---", new { @class = "select2-arrow" })
</fieldset>
</div>
$('#btnsearch').click(function() {
var genericID = $('#MasterGenericID').val();
$.ajax({
type: 'POST',
url: "@Url.Action("ProductMasterController", "ProductMasterview")",
data: JSON.stringify(GenericID),
contentType: "application/json",
dataType: 'json',
success: function(data) {
// if (response.id > 0)
alert("test" + data.GenericID);
},
async: true // make it true if you want to make an async call.
});
});
public ActionResult ProductMasterview(string GenericID)
if (Convert.ToInt32(GenericID) > 0)
{
return View(dPMSP.GetAllProductsUsingGenericID(GenericID));
}
else
{
Generic_Bind();
Therapeutic_Bind();
SubTherapeutic_Bind();
Formulation_Bind();
return View(dPMSP.GetAllProducts());
}
}
Error page
谢谢
您直接将值传递给 ajax 调用,您应该传递具有 GenericID 属性
的对象示例-
$('#btnsearch').click(function () {
var value = $('#MasterGenericID').val();
var data = {
GenericID: value
};
$.ajax({
type: 'POST',
url: "@Url.Action("ProductMasterview", "ProductMaster")",
data: JSON.stringify(data),
contentType: "application/json",
dataType: 'json',
success: function(data) {
// if (response.id > 0)
alert("test" + data.GenericID);
},
async: true // make it true if you want to make an async call.
});
});
js应该是这样的
$('#btnsearch').click(function() {
var genericID = $('#MasterGenericID').val();
var postData={
GenericID:genericID
};
$.ajax({
type: 'POST',
url: '@Url.Action("ProductMasterController", "ProductMasterview")',
data: postData,
dataType: 'json',
success: function(data) {
// if (response.id > 0)
alert("test" + data.GenericID);
},
error: function(xhr, ajaxOptions, thrownError) {
alert('Failed to delete');
}
});
});
并且 C# 代码应该如下所示
[HttpPost]
public ActionResult ProductMasterview(string GenericID)
{
if (Convert.ToInt32(GenericID) > 0)
{
//return View(dPMSP.GetAllProductsUsingGenericID(GenericID));
//you can return only the genericId as you expect it at ajax success
return Json(new { GenericID = yourGenericId});
}
else
{
Generic_Bind();
Therapeutic_Bind();
SubTherapeutic_Bind();
Formulation_Bind();
//return View(dPMSP.GetAllProducts());
//you can return only the genericId as you expect it at ajax success
return Json(new { GenericID = yourGenericId});
}
}
您的代码有很多问题。
看看这条线
data: JSON.stringify(GenericID),
您正在使用一个变量 GenericID
,但它没有在任何地方定义。请记住 javascript 区分大小写 。因此,请确保您使用的大小写正确。
现在看看这一行
url: '@Url.Action("ProductMasterController", "ProductMasterview")',
您未正确使用 Url.Action
辅助方法。如果您使用的重载有两个参数,第一个参数应该是动作名称,第二个应该是控制器名称。您也不需要 Controller
后缀。所以应该是
url: "@Url.Action("ProductMasterview", "ProductMaster")",
我注意到的另一个问题是,您将 ajax 调用的数据类型 属性 指定为 json
。 $.ajax
方法使用此 属性 值来解析来自服务器的数据。此处您告诉 $.ajax
您期望来自服务器的 JSON 响应。但是您的操作方法是 return 查看结果,它是 HTML/Plain 文本,而不是 JSON。因此您的代码将无法按预期工作。
我还看到您正在进行 POST 调用,但您的操作方法未使用 HttpPost 属性修饰。所以你的 ajax 调用不会命中 action 方法。从你的问题中也不清楚你想要什么类型的数据 return.(JSON / View result-HTML).
如果您正在 return 查看结果(html 标记),您应该 return 查看部分视图结果,以便您可以使用它来更新部分视图你的 DOM。 如果您正在 return 浏览整个视图,那么进行 ajax 调用是没有意义的(当我看到 [=21] 中的 4 个方法调用时,我觉得您正在尝试这样做=] 部分在您的操作方法代码中)。
还要使用正确的数据类型。如果要传递数值,请使用数字类型(int
或 long
),而不是使用 string
作为参数并稍后进行转换。请记住,当您传递给它的值无法安全地转换为 int 时,Convert.ToInt32
会抛出异常(例如:12abc
)。
使用int
作为参数类型。
public ActionResult ProductMasterview(int genericId)
{
// some other logic you want to do .
return PartialView(dPMSP.GetAllProductsUsingGenericID(genericId));
}
您应该更新 GetAllProductsUsingGenericID
方法以也采用 int 类型,而不是字符串。
现在在您的客户端,您可以在数据中传递选定的选项值属性。由于您的操作方法未使用 HttpPost 属性修饰,因此只需使用 GET($.ajax
的默认类型)。同时在 js object 中发送选定的选项值,键与您的操作方法参数名称匹配。
$('#btnsearch').click(function() {
var id = $('#MasterGenericID').val();
$.ajax({
url: "@Url.Action("ProductMasterview", "ProductMaster")",
data: { genericId: id }
}).done(function(response) {
console.log('Received response from server');
console.log(response);
// If you want to update the DOM with the response
// Ex : $("#SomeDomElementId").html(response);
}).fail(function(x, a, e) {
alert(e);
});
});
如果您想从您的操作方法中 return JSON,那很好。您不必一定要指定 dataType
属性,因为 jQuery 会尝试根据响应 headers 智能地猜测它。