Asp.net mvc 在ASP.NET MVC中单击ActionLink后如何保持在同一页面上?
我是ASP.NET MVC新手。我正在制作我的Web应用程序,希望实现从列表中添加朋友,在单击链接“Dodaj”(英文:“Add”)后,我想保存我的朋友,但要保持在同一页面上,并且只更新我的列表 在我的profile.cshtml中,我有:Asp.net mvc 在ASP.NET MVC中单击ActionLink后如何保持在同一页面上?,asp.net-mvc,actionlink,Asp.net Mvc,Actionlink,我是ASP.NET MVC新手。我正在制作我的Web应用程序,希望实现从列表中添加朋友,在单击链接“Dodaj”(英文:“Add”)后,我想保存我的朋友,但要保持在同一页面上,并且只更新我的列表 在我的profile.cshtml中,我有: @foreach (var item in Model.neprijatelji) { <tr> <td> @Html.DisplayFor(modelItem => item.I
@foreach (var item in Model.neprijatelji)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.IME_GOSTA)
</td>
<td>
@Html.DisplayFor(modelItem => item.PREZIME_GOSTA)
</td>
<td>
@Html.ActionLink("Dodaj", "Dodaj", new { id = item.EMAIL_GOSTA })
</td>
</tr>
}
我得到的结果是找不到错误404。我知道这是错误的,但我应该如何实施
更新:
以下是我尝试过的:
在我的profile.cshtml中,我完成了以下工作:
以下是我尝试的内容:在Profil.cshtml中,我有以下内容:
@foreach (var item in Model.neprijatelji)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.IME_GOSTA)
</td>
<td>
@Html.DisplayFor(modelItem => item.PREZIME_GOSTA)
</td>
<td>
<a href="#" onclick="AddFriend(this)" data-id='@item.EMAIL_GOSTA' > Dodaj </a>
<script>
function AddFriend(ele)
{
var values={id:$(ele).attr('data-id')};
$.post("/Profil/Dodaj", values, function (abc) {
var result=$.parseJSON(abc)
if (result.isAdded == "success") { alert("I just added this alert that my if isn't empty"); }
//Logic to append tr to existing table
else { alert("Some alert"); }
//raise exception or alert maybe.
});
}
</script>
</td>
当我在JavaScript函数上设置断点时,我得到:
断点将不会被命中。没有与此行关联的可执行代码
当我点击“Dodaj”时,它似乎只识别href=“#”,因为从链接:然后我得到
此外,我还需要做一些额外的设置才能使我的JavaScript代码正常工作。我是否应该将JS代码保存在不同的文件中,然后保存到Profil.cshtml中?这里不要使用操作链接,而是尝试使用ajax post。并从操作Dodaj返回JSON结果。然后,如果返回的结果是成功的,则通过Jquery向表追加一个新的tr,否则返回一个错误
@foreach (var item in Model.neprijatelji)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.IME_GOSTA)
</td>
<td>
@Html.DisplayFor(modelItem => item.PREZIME_GOSTA)
</td>
<td>
<a href="#" onclick="AddFriend(this)" data-id='@item.EMAIL_GOSTA'/>
</td>
</tr>
}
虽然我还没有测试代码,但方法应该是这样的。这里不要使用操作链接,而是尝试使用ajax post。并从操作Dodaj返回JSON结果。然后,如果返回的结果是成功的,则通过Jquery向表追加一个新的tr,否则返回一个错误
@foreach (var item in Model.neprijatelji)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.IME_GOSTA)
</td>
<td>
@Html.DisplayFor(modelItem => item.PREZIME_GOSTA)
</td>
<td>
<a href="#" onclick="AddFriend(this)" data-id='@item.EMAIL_GOSTA'/>
</td>
</tr>
}
虽然我没有测试代码,但方法应该是这样。Profil操作与
Dodaj
操作在同一控制器中吗?如果没有,则必须明确给出Profil
所在的控制器名称。否则,您将继续收到404错误在尝试将某人添加到列表时,您可能希望查看“Dodaj”与“Profil”操作在同一控制器中。Profil
操作与Dodaj
操作在同一控制器中吗?如果没有,则必须明确给出Profil
所在的控制器名称。否则,您将继续收到404错误在尝试将某人添加到列表时,您可能需要查看“Dodaj”与“Profil”操作在同一控制器中。我做了所有事情,就像您做的一样。在my Profil.cshtml中,从未调用此JavaScript函数:(问题是什么?你看到浏览器控制台了吗?那里有没有javascript错误。你能发布代码以便我们调试和解决问题吗?我所做的是:请将razor代码和javascript代码分开。它也可以写在同一个cshtml文件中。即使它在url中添加了#,您也删除了href以避免出现这种情况。可能的问题是函数正在被调用,但JQUery可能有问题,因为您看到$。post不是一个简单的javascipt函数。因此,请在布局中添加JQUery js以支持这些函数。我做了所有事情。在我的Profil.cshtml中,这是一个JavaScript函数从未有人打电话给你(问题是什么?你看到浏览器控制台了吗?那里有没有javascript错误。你能发布代码以便我们调试和解决问题吗?我所做的是:请将razor代码和javascript代码分开。它也可以写在同一个cshtml文件中。即使它将#添加到url中,您也可以删除href以避免此情况。可能的问题是函数正在被调用,但JQUery可能存在问题,因为您看到$。post不是一个普通的javascipt函数。因此,请在布局中添加JQUery js以支持这些函数。
@foreach (var item in Model.neprijatelji)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.IME_GOSTA)
</td>
<td>
@Html.DisplayFor(modelItem => item.PREZIME_GOSTA)
</td>
<td>
<a href="#" onclick="AddFriend(this)" data-id='@item.EMAIL_GOSTA'/>
</td>
</tr>
}
<script>
function AddFriend(ele)
{
var values={id:$(ele).attr('data-id')};
$.post(someRootPath + "/Profil/Dodaj", values, function (abc) {
var result=$.parseJSON(abc)
if(result.isAdded=="success")
//Logic to append tr to existing table
else
//raise exception or alert maybe.
});
}
public JsonResult Dodaj( string id)
{
string posiljalac = Session["idGosta"].ToString();
PRIJATELJI pr = new PRIJATELJI();
pr.EMAIL_GOSTA = posiljalac;
pr.EMAIL_GOSTA1 = id;
pr.PRIJATELJI_OD = System.DateTime.Now;
try{
db.PRIJATELJIs.Add(pr);
db.SaveChanges();
return Json(new { isAdded = "success"}, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
return Json(new { isAdded = "failure" }, JsonRequestBehavior.AllowGet);
}
}