Asp.net mvc 尽管路由到控制器,Url.ActionLink仍会导致404错误
在我的ASP MVC 3页面上,当用户从下拉列表中选择一个没有相应值的项目时,我会动态创建一个字段集,其中包含一个带有Asp.net mvc 尽管路由到控制器,Url.ActionLink仍会导致404错误,asp.net-mvc,asp.net-mvc-3,jquery,Asp.net Mvc,Asp.net Mvc 3,Jquery,在我的ASP MVC 3页面上,当用户从下拉列表中选择一个没有相应值的项目时,我会动态创建一个字段集,其中包含一个带有onclick()方法的按钮。当用户在输入框中为他们想要创建的字段键入一个值,然后单击按钮时,我正试图使用适当的参数(下拉列表中选择的项目和用户刚刚输入的文本)将它们发送到create控制器操作。然而,每次我点击按钮,我都会收到一个404错误 我在控制器中的Create方法的开始处设置了一个断点,它从未被触发,因此我知道问题不在于渲染了什么并发送回视图,而在于最初试图到达Crea
onclick()
方法的按钮。当用户在输入框中为他们想要创建的字段键入一个值,然后单击按钮时,我正试图使用适当的参数(下拉列表中选择的项目和用户刚刚输入的文本)将它们发送到create
控制器操作。然而,每次我点击按钮,我都会收到一个404错误
我在控制器中的Create
方法的开始处设置了一个断点,它从未被触发,因此我知道问题不在于渲染了什么并发送回视图,而在于最初试图到达Create
控制器(尽管我知道这可能从404错误中很明显:)
我已经检查了URL,它正在正确呈现,所以我不确定我做错了什么。下面是创建字段集的jquery/ajax
<script>
$(document).ready(function () {
var globalCreate = '@Url.Action("Create", "DropDownValues")';
var globalEdit = '@Url.Action("Edit", "DropDownValues")';
$('#Categories').change(function () {
var displayPage = $('#Categories option:selected').text();
$.ajax({
type: 'GET',
url: '@Url.Action("getItems","DropDownValues")',
data: { model: displayPage },
success: function (data) {
if (data == "") {
//Clear edits if necessary
if ($('#edits').html()) {
$('#edits').empty();
}
$('#edits').append('<fieldset style=width:250px;><legend>No fields yet</legend>' +
'<div class=editor-label>' +
'Enter field name' +
'</div>' +
'<div class=editor-field>' +
'<input type="text" id="newField" />' +
'</div>' +
'<button onclick="addItems()">Add Items</button>' +
'</fieldset>');
} else {
现在,如果我要选择Testing display
下拉项,在输入框中键入asdf
,然后单击按钮,将呈现以下URL
http://localhost:2574/DropDownValues/Create/Testing%20display/asdf
这是来自控制器的方法签名
public ActionResult Create(string model, string field)
{
在url中提供参数名称
function addItems()
{
var newUrl="@Url.Action("Create", "DropDownValues")?model="+
$('#Categories option:selected').text() +
"&field=" + $('#newField').val();
window.location.href = newUrl;
}
您还可以考虑对QuiSQL字符串值进行编码。你可以用这个方法
对于创建/更新/删除操作,使用GET请求不是一个好主意。您应该使用POST请求。(机器人/搜索引擎/或愤怒的用户可以删除您的数据/继续向数据库添加垃圾数据)在url中提供参数名称
function addItems()
{
var newUrl="@Url.Action("Create", "DropDownValues")?model="+
$('#Categories option:selected').text() +
"&field=" + $('#newField').val();
window.location.href = newUrl;
}
您还可以考虑对QuiSQL字符串值进行编码。你可以用这个方法
对于创建/更新/删除操作,使用GET请求不是一个好主意。您应该使用POST请求。(机器人程序/搜索引擎/或愤怒的用户可以删除您的数据/继续向数据库中添加垃圾数据)您的
创建
操作方法是什么样子的?鉴于您目前所展示的内容,下拉值
是控制器,创建
是操作。这是否正确?您的create
操作方法是什么样子的?鉴于您目前所展示的内容,DropDownValues
是控制器,create
是操作。这是正确的吗?