C# 在mvc4中,如何将数据从部分视图传递到操作后方法?
您好,我有一个视图名为客户。在该视图中,我有一个字段名为区域。我在该区域附近保留了一个添加按钮。假设如果区域不在列表中,则意味着我单击了添加按钮,它将以弹出窗口的形式打开AreaPartialView 现在我有一个问题。也就是说,数据没有从局部视图传递到控制器的后操作方法 我的型号C# 在mvc4中,如何将数据从部分视图传递到操作后方法?,c#,jquery,ajax,asp.net-mvc-4,C#,Jquery,Ajax,Asp.net Mvc 4,您好,我有一个视图名为客户。在该视图中,我有一个字段名为区域。我在该区域附近保留了一个添加按钮。假设如果区域不在列表中,则意味着我单击了添加按钮,它将以弹出窗口的形式打开AreaPartialView 现在我有一个问题。也就是说,数据没有从局部视图传递到控制器的后操作方法 我的型号 public Nullable<System.Guid> AreaID { get; set; } public string Area { get; set; } public
public Nullable<System.Guid> AreaID { get; set; }
public string Area { get; set; }
public Nullable<System.Guid> CityID{ get; set; }
public string City { get; set; }
我的观点
<div id="Area">
<div class="col-sm-4">
<div class="form-group">
@Html.LabelFor(model => model.Area, new { @class = "control-label"})
@Html.DropDownList("AreaID", null, "Select", new { @class = "form-control required" })
<button id="AddArea">Area</button>
<div id="AddAreaNew"></div>
</div>
</div>
</div>
@Html.Label("Area" , new { @class = "control-label" })
@Html.TextBoxFor(model => model.Area, new { @class = "form-control", type = "text" ,id ="AreaName"})
@Html.ValidationMessageFor(model => model.Area)
@Html.Label("City")
@Html.DropDownList("CityID", null, "Select", new { @class = "form-control " })
<script src="~/Scripts/jquery-1.10.4-ui.min.js"></script>
<link href="~/Content/jquery-ui-1.10.4.custom.min.css" rel="stylesheet" />
<script src="~/Scripts/jquery-ui-1.8.24.min.js"></script>
<script type="text/javascript">
function SaveArea() {
var Area = $("#AreaName").val();
var CityID = $("#CityID").val();
alert(Area);
var AreaAdd = {
"AreaName": Area, "CityID": CityID
};
alert(AreaAdd.AreaName);
alert(AreaAdd.CityID);
$.post("/Customer/AddAreaInfo", AreaAdd,
function (data) { if (data == 0) { location = location.href; } }, 'json').success(function (data) {
alert("success");
//window.close();
});
}
</script>
@LabelFor(model=>model.Area,新的{@class=“control label”})
@DropDownList(“AreaID”,null,“Select”,new{@class=“form control required”})
地区
我的j-query
<script src="~/Scripts/jquery-1.10.2-ui.js"></script>
<link rel="stylesheet"href="http://code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css" />
<script type="text/javascript">
$("#AddArea").click(function () {
$('#AddAreaNew').dialog("open");
});
$(function () {
$('#AddAreaNew').dialog({
autoOpen: false,
width: 400,
height: 500,
resizable: false,
title: 'Add Area',
modal: true,
open: function (event, ui) {
$(this).load("@Url.Action("AreaPartialView", "Customer")");
},
buttons: {
"Close": function () {
$(this).dialog("close");
}
}
});
});
$(“#添加区域”)。单击(函数(){
$('#AddAreaNew')。对话框(“打开”);
});
$(函数(){
$('#AddAreaNew')。对话框({
自动打开:错误,
宽度:400,
身高:500,
可调整大小:false,
标题:“添加区域”,
莫代尔:是的,
打开:功能(事件、用户界面){
$(this.load(@Url.Action(“AreaPartialView”、“Customer”));
},
按钮:{
“关闭”:函数(){
$(此).dialog(“关闭”);
}
}
});
});
我的局部观点
<div id="Area">
<div class="col-sm-4">
<div class="form-group">
@Html.LabelFor(model => model.Area, new { @class = "control-label"})
@Html.DropDownList("AreaID", null, "Select", new { @class = "form-control required" })
<button id="AddArea">Area</button>
<div id="AddAreaNew"></div>
</div>
</div>
</div>
@Html.Label("Area" , new { @class = "control-label" })
@Html.TextBoxFor(model => model.Area, new { @class = "form-control", type = "text" ,id ="AreaName"})
@Html.ValidationMessageFor(model => model.Area)
@Html.Label("City")
@Html.DropDownList("CityID", null, "Select", new { @class = "form-control " })
<script src="~/Scripts/jquery-1.10.4-ui.min.js"></script>
<link href="~/Content/jquery-ui-1.10.4.custom.min.css" rel="stylesheet" />
<script src="~/Scripts/jquery-ui-1.8.24.min.js"></script>
<script type="text/javascript">
function SaveArea() {
var Area = $("#AreaName").val();
var CityID = $("#CityID").val();
alert(Area);
var AreaAdd = {
"AreaName": Area, "CityID": CityID
};
alert(AreaAdd.AreaName);
alert(AreaAdd.CityID);
$.post("/Customer/AddAreaInfo", AreaAdd,
function (data) { if (data == 0) { location = location.href; } }, 'json').success(function (data) {
alert("success");
//window.close();
});
}
</script>
@Html.Label(“区域”,新的{@class=“control Label”})
@Html.TextBoxFor(model=>model.Area,新的{@class=“formcontrol”,type=“text”,id=“AreaName”})
@Html.ValidationMessageFor(model=>model.Area)
@Html.Label(“城市”)
@DropDownList(“CityID”,null,“Select”,new{@class=“form control”})
函数SaveArea(){
var Area=$(“#AreaName”).val();
var CityID=$(“#CityID”).val();
警戒区;
变量区域添加={
“区域名称”:区域,“城市ID”:城市ID
};
警报(AreaAdd.AreaName);
警报(AreaAdd.CityID);
$.post(“/Customer/AddAreaInfo”,区域添加,
函数(数据){if(数据==0){location=location.href;}}},'json').success(函数(数据){
警惕(“成功”);
//window.close();
});
}
如果我单击“添加”按钮区域,局部视图将作为弹出窗口打开,如果我输入详细信息并单击“创建”按钮,它将获得值并显示所有警报消息。但问题是它没有将面积值传递给post action方法,它传递了城市ID值,但没有将面积值传递给post方法。面积值将始终为空
请任何人核对我的代码并告诉我解决方案
提前感谢…我不熟悉asp.net,请尝试此更改
var AreaAdd = { Area: Area, CityID: CityID };
或者使用FormCollection
public ActionResult AddAreaInfo(FormCollection objareaVM)
{
var objAreaID = Guid.NewGuid();
ViewBag.CityID = new SelectList(db.Cities, "CityID", "DisplayName", objareaVM["CityID"]);
var ObjArea = new Area()
{
AreaID =objAreaID,
DisplayName = objareaVM["AreaName"],
PrintName = objareaVM["AreaName"],
CityID = objareaVM["CityID"],
IsActive = true,
IsDeleted = false,
CreatedDate = DateTime.Now,
EditedDate = DateTime.Now,
LastActiveOn = DateTime.Now,
RowID = Guid.NewGuid(),
CreatedSessionID = Guid.NewGuid(),
EditedSessionID = Guid.NewGuid(),
OfflineMode = false,
OfflineID = Guid.NewGuid()
};
db.Areas.Add(ObjArea);
db.SaveChanges();
ModelState.Clear();
return Json("Customer", JsonRequestBehavior.AllowGet);
}
查看您的模型类,您有类属性的“区域”名称
public string Area { get; set; }
而且你发布的区域带有“AreaName”,所以它是不正确的
var AreaAdd = {
"AreaName": Area, "CityID": CityID
};
现在更改部分视图Jquery代码:
var AreaAdd = {
"Area": Area, "CityID": CityID
};
这将为您带来好处:
var AreaAdd = {Area:"your area", CityID:"your city id"};
实际上,在mvc中,名称应该与模型属性的名称完全相同。使用ajax获取并将面积值传递给控制器,返回基于面积值的视图,CityId也使用ajax,但获取相同的问题其可能的madalin将显示错误。因为在那个地方,我们将正确地引用模型。根据我所能告诉的,在asp.net中,传递给控制器(AreaAdd)的javascript对象名为objareaVM。如果我错了,请告诉我。Madalin流程是,如果数据首先传递给模型,然后只传递给控制器。所以我们必须在controller中传递模型名,我们不能传递在j查询中给出的obj名,据我所知,这在mvc4中是正确的。你在用ajax数据
AreaAdd
?做什么,如果你使用的是模型中的数据,为什么要传递它?首先,我们获取特定对象var Area=$(“#AreaName”)中的数据.val();var CityID=$(“#CityID”).val();然后在单个对象变量AreaAdd={“AreaName”:Area,“CityID”:CityID}中分配两个数据;然后我们将这个AreaAdd传递给控制器的post-action方法,看看URLs,但是我给了id作为AreaName chiragOk现在使用:var AreaAdd={“Area”:AreaAdd.AreaName,“CityID”:CityID};它会工作的。没有chirag它不工作它没有使用后期操作方法根据我的代码它在var AreaAdd={“AreaName”:Area,“CityID”:CityID}中获取值;它显示警报消息。但它没有通过值控制器。它传递城市id但不传递区域值这是我的问题请尝试以下('):var AreaAdd={“AreaName”:“+area+”,“CityID”:CityID};kayani它完全改变了我给出的输出,就像你提到的一样,它将面积的值传递为AreaName(我的AreaField ID名称)和CityID传递给city Field。它非常不言自明,你可以修改它以满足你的需要