注意:我是MVC的新手
在我的情况下,它有两个视图和两个控制器。我从第一个视图使用ajax将选定的项值传递给第二个控制器。通过成功。 但是当第二个视图出现时,该值为null。这是ajax问题还是mvc。我无法理解。
这是我的第一个控制器和第一个视图
public ActionResult First()
{
//get the location data
var Loc = getData("Location", "", "", "");
List<Firstdata> llc = new List<Firstdata>();
foreach (var val in Loc)
{
llc.Add(new Firstdata
{
Destination =val
});
}
ViewBag.Loc = llc;
return View();
}
第一次观看
<div class="col-md-6 form-group">
<label>Destination</label>
<select class="form-control" id="destination">
@foreach (var item1 in @ViewBag.Loc)
{
<option>@item1.Destination</option>
}
</select>
</div>
<div class="clearfix"></div>
<div class="form-group">
<div class="btn" id="bud">
@Html.ActionLink("GO", "Check","Cruise")
</div>
</div>
ajax在第一个视图中传递
<script type="text/javascript">
$("#bud a").click(function () {
var destination = $("#destination").val();
$.ajax({
url: '@Url.Action("Check","Cruise")',
data: { 'destination': destination },
type: "POST",
dataType: "XML",
//contentType: "application/xml",
async: true,
success: function(data){
if (!data)
alert("no xml data returned");
else {
alert("success");
}
//location.href = "~/Views/Cruise/Check.cshtm";
}
});
});
</script>
这是我的第二个控制器
public ActionResult Check(string destination)
{
XElement rootele = XElement.Load(Server.MapPath("~/XmlFiles/CruiseData/cruiseprodutstwo.xml"));
var getneededData = rootele.Elements("CruiseProduct")
.Where(l => l.Element("Location").Value == destination)
.Select(s => s.Element("Name").Value);
List<Details> d = new List<Details>();
foreach(var itm in getneededData)
{
d.Add(new Details
{
cruiseName = itm
});
}
ViewBag.needed = d;
return View();
}
**此时目的地不为空,d(ViewBag.needed)也不为空。它显示计数
这是我的第二个观点
<div>
@foreach (var itme in @ViewBag.needed)
{
<h2>@itme</h2>
}
</div>
在这里循环遍历@ ViewBag.needed计数,最后显示null.no想法是什么。 请帮帮我。
答案 0 :(得分:0)
我认为那里存在路由问题。如果您使用的是
的默认路由 routes.MapRoute(name:"Default",
url:"{controller}/{action}/{id}",
defaults:new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
然后你需要将控制器参数名称目标chagne到id 为:
public ActionResult Check(string id)
{
并在JQuery调用中将其更改为
$.ajax({
url: '@Url.Action("Check","Cruise")',
data: { 'id': destination },
或者 您可以在RouteConfig.cs中添加新路由
routes.MapRoute(name:"Default",
url:"{controller}/{action}/{destination}",
defaults:new { controller = "Cruise", action = "Check" }
);
对于路由,您可以参考Repeater