我对MVC很新,所以请忍受我明显的问题
我在VS2010中创建了一个简单的MVC2网站
我在控制器文件夹中添加了一个受控制的 控制器代码:
namespace MVC2TestApp.Controllers
{
using MVC2TestApp.Models;
public class PeopleController : Controller
{
//
// GET: /People/
public ActionResult Index()
{
return View();
}
// [HttpPost]
public ActionResult AddPeople(PeopleModel person)
{
return View("Index");
}
[HttpPost]
public ActionResult Add(PeopleModel person)
{
return View("Index");
}
}
}
查看代码:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Index
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Index</h2>
<button id="btnTest">Test</button>
<script type="text/javascript">
$(document).ready(function () {
alert('ready got executed');
$('#btnTest').click(function () {
// debugger;
try {
var person = { FirstName: "Joe", LastName: "Soap", Email: "a@b.c" };
alert(1);
$.ajax({
url: 'Add',
dataType: 'json',
data: person,
type: 'POST',
success: function (result) {
alert('step 3');
alert(result);
},
failure: function (result) {
alert('step 4');
alert(result);
}
});
} catch (e) {
alert(e.responseText);
}
});
});
</script>
</asp:Content>
People Controller:
namespace MVC2TestApp.Models
{
public class PeopleModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email{get;set;}
}
}
我通过在解决方案的属性中设置人物页面作为我的启动页面 - &gt;网络 - &gt;开始操作 - &gt;特定页面:人员\
这与预期一样,我在控制器中获取对象。
但是当启动页面设置为Home时,代码不会命中控制器。我不知道我做错了什么。
我尝试更改Global.asax中的RegisterRoutes方法。但这没有帮助。
Global.asax代码
namespace MVC2TestApp
{
// Note: For instructions on enabling IIS6 or IIS7 classic mode,
// visit http://go.microsoft.com/?LinkId=9394801
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional },// Parameter defaults
new string[] { "MVC2TestApp.Controllers" }//This code was added to try to fix the problem
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
}
}
}
这是一个MVC2应用程序。我有VS2010专业版。
答案 0 :(得分:0)
您可以在js中引用您的操作的完整路径。
您可以使用此方法(http://localhost:50000/People/Add
)获取完整路径:
@Url.Action("Add", "People", null, Request.Url.Scheme, null)
那么你所在的页面无关紧要,你总是可以调用相同的动作,而且不会有相关网址的麻烦。
样品:
$('#btnTest').click(function () {
// debugger;
try {
var person = { FirstName: "Joe", LastName: "Soap", Email: "a@b.c" };
var url = '@Url.Action("Add", "People", null, Request.Url.Scheme, null)';
alert("Url: " + url);
$.ajax({
url: url,
dataType: 'json',
data: person,
type: 'POST',
success: function (result) {
alert("Success!");
alert(result);
},
failure: function (result) {
alert("Fail!");
alert(result);
}
});
} catch (e) {
alert(e.responseText);
}
});