在我的ASP MVC 3页面上,当用户从下拉列表中选择一个没有相应值的项目时,我动态创建一个包含带onclick()
方法的按钮的字段集。当用户在他们想要创建的字段的输入框中键入一个值,然后单击该按钮时,我试图将它们路由到具有适当参数的Create
控制器操作(在drop中选择的项目)下拉列表和用户刚输入的文本)。但是,每次我点击按钮时都会收到404错误。
我在控制器中的Create
方法的开头设置了一个断点,它永远不会跳闸,所以我知道问题不在于渲染的内容并被发送回视图,它是最初尝试到达Create
控制器(虽然我明白这可能是因为404错误:)
我已经检查了网址,它正在正确呈现,所以我不确定我做错了什么。这是创建fieldset的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 {
这是onclick方法
function addItems(){
window.location.href = ('@Url.Action("Create", "DropDownValues")' + '/' + $('#Categories option:selected').text() + '/' + $('#newField').val());
}
现在,如果我要选择Testing display
下拉项,请在输入框中输入asdf
,然后点击按钮,将显示以下网址
http://localhost:2574/DropDownValues/Create/Testing%20display/asdf
这是来自控制器的方法签名
public ActionResult Create(string model, string field)
{
答案 0 :(得分:1)
在网址中提供参数名称。
function addItems()
{
var newUrl="@Url.Action("Create", "DropDownValues")?model="+
$('#Categories option:selected').text() +
"&field=" + $('#newField').val();
window.location.href = newUrl;
}
您也可以考虑对查询字符串值进行编码。您可以使用encodeURIComponent
方法。
对于CREATE / UPDATE / DELETE操作,使用GET请求不是一个好主意。您应该使用POST请求。 (机器人/搜索引擎/或愤怒的用户可以删除您的数据/继续向您的数据库添加垃圾数据)