您好我从数据库中选择数据,我希望这些数据从我的控制器传递到ajax查看,但它无法正常工作。
请你能帮帮我吗?
这是我的控制器:
[HttpGet]
public ActionResult Foo(string email_uzivatele)
{
var person = AdvertServiceLayer.Instance.SelectByEmail(email_uzivatele);
return Json(person, JsonRequestBehavior.AllowGet);
}
这里我想要显示从数据库中选择的电子邮件:
<input id="email" name="email_uzivatele" type="text" class="form-control input-md">
这是我的ajax功能:
$(function () {
function getPerson(email_uzivatele) {
$.ajax({
url: '@Url.Action("Foo", "Home")',
type: 'GET',
dataType: 'json',
cache: false,
data: { email_uzivatele: email_uzivatele },
success: function (person) {
$('#email').val(person.email_uzivatele);
}
});
}
});
以下是从数据库中选择电子邮件的功能:
public List<Advert> SelectByEmail(string email_uzivatele)
{
string queryString = "SELECT distinct email_uzivatele from
Reklama
where email_uzivatele like '%" + @email_uzivatele + "%'";
// Create the Command and Parameter objects.
SqlCommand command = new SqlCommand(queryString, Connection);
command.Parameters.AddWithValue("@email_uzivatele", "");
// Open the connection in a try/catch block.
// Create and execute the DataReader, writing the result
// set to the console window.
try
{
SqlDataReader reader = command.ExecuteReader();
List<Advert> advert = new List<Advert>();
while (reader.Read())
{
Advert a = new Advert();
a.email_uzivatele = reader[0].ToString();
Console.WriteLine("email_uzivatele: " + " " + "
" + a.email_uzivatele);
advert.Add(a);
}
reader.Close();
return advert;
}
catch (Exception ex)
{
chyba.zapsat_do_souboru(ex.Message);
Console.OpenStandardOutput();
Console.WriteLine(ex);
//zalogovat chybu
return null;
}
}
答案 0 :(得分:2)
我认为问题来自url属性。其他一切似乎都是正确的。我推荐你的更好的方法是使用Ajax html helper。我向你展示了两个例子--ajax helper和jquery。
Ajax帮助方法 - &gt;我更喜欢它,因为MVC视图保持干净,而JS没有来自不同文件的一些请求
@using (Ajax.BeginForm("AddToArticle", "Comments", null, new AjaxOptions
{
HttpMethod = "POST",
InsertionMode = InsertionMode.InsertBefore,
UpdateTargetId = "comments-list",
OnSuccess = "acceptedComment",
OnFailure = "rejectedComment"
}))
{
@Html.AntiForgeryToken()
<input type="hidden" value="@Model.Id" name="toId"/>
<div class="row bottom-margin">
<div class="col-md-12">
<textarea id="comment-area" class="form-control" placeholder="Коментар" rows="5" name="content"></textarea>
</div>
</div>
<div>
<input type="submit" class="show-more cat-sports" title="Post comment" value="Добави"/>
</div>
}
在这里,您可以轻松地将[ValidateAntiForgery]属性放在您的操作上,如果您在视图中有@ Html.AntiForgeryToken(),它将自动验证。使用JS,您也可以验证防伪令牌。它可以防止您受到XSRF攻击并提高安全性。最佳实践表明它必须在每个POST请求中保留。
这是jquery的一个例子。在这种情况下你的错误是url属性
你应该把它作为这样的URL传递:
$.ajax({
url: "/Home/Foo",
我希望这能解决你的问题。 最好的问候
答案 1 :(得分:1)
我再次阅读了你的问题,我发现你的观念是错误的。我会在接下来的几行中解释一下我的意思。所以..
没有通过ajax从控制器传递数据的事情。您只能将带有ajax的数据从View传递到Controller。它用于SPA功能的情况。如果要加载数据并在视图中显示它,则应在MVC中使用视图模型并将其直接加载到视图中。
我已经用ajax为你做了一个工作实例,我将向你解释。首先,你没有调用你的功能。
在这种情况下,我做了一个简单的例子来向您展示这个想法是什么。
这是控制器
[HttpGet]
public ActionResult Foo(string email_uzivatele)
{
return Json(email_uzivatele, JsonRequestBehavior.AllowGet);
}
这些是html输入
<input id="email" name="email_uzivatele" type="text" class="form-control input-md">
<input id="submit-btn" type="submit" value="Sumbit" />
这是你的JS功能
$(function () {
$('#submit-btn').on('click', function () {
var email_uzivatele = $('#email').val();
$.ajax({
url: '/Home/Foo',
type: 'GET',
dataType: 'json',
cache: false,
data: { email_uzivatele: email_uzivatele },
success: function (person) {
$('#email').val(person.email_uzivatele);
}
});
});
});
在这种情况下,您可以通过提交按钮上的ajax将您在文本框中键入的值传递到控制器中