2016-09-09 5 views
-1

Я новичок в ASP.NET MVC. Я делаю свое веб-приложение и хочу реализовать добавление друзей из списка, а после нажатия ссылки «Dodaj» (на английском языке: «Добавить») Я хочу сохранить своего друга, но оставайтесь на одной странице и просто обновляйте свой список. enter image description hereКак остаться на одной странице после нажатия на ActionLink в ASP.NET MVC?

В моей 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> 

      @Html.ActionLink("Dodaj", "Dodaj", new { id = item.EMAIL_GOSTA }) 

     </td> 
    </tr> 
} 

В Мой ProfilController.cs Действие Dodaj У меня есть это:

[HttpPost] 
public ActionResult 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; 
    db.PRIJATELJIs.Add(pr); 
    db.SaveChanges(); 
    return RedirectToAction("Profil"); //O just want to do some change and stay on same page 
} 

Что я получаю в качестве результата Ошибка 404 не найден. Я знаю, что это неправильно, но как я должен это реализовать?

UPDATE: Вот что я пытаюсь: В моей Profil.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> 

В мой ProfilController я это:

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); 
     } 
    } 

Когда я ставлю точку останова на функции JavaScript я получаю: точки останова не будет удар не исполняемый код не является ssociated с этой линией

Когда я нажимаю на «Dodaj», кажется, что она признает только HREF = «#», потому что по ссылке: http://localhost:50884/Profil/Profil тогда я получаю http://localhost:50884/Profil/Profil#

Кроме того, я должен сделать некоторые дополнительные настройки чтобы мой код JavaScript работал. Должен ли я сохранить код JS в другом файле, то Profil.cshtml?

+0

- это действие «Profil» в том же контроллере, что и «Dodaj»? Если нет, вы должны явно указать имя контроллера, в котором находится «Profil». В противном случае вы будете продолжать получать 404 ошибки –

+1

В отношении того, чтобы оставаться на одной странице при попытке добавить кого-то в список, вы можете захотеть заглянуть в [ajax] (http://api.jquery.com/jQuery.ajax /) –

+0

«Додай» находится в том же контроллере, что и «Профили». – acogrunge

ответ

2

Здесь вместо того, чтобы использовать действие Ссылка попытаться использовать пост ajax. И вернуть JSON результат действия Dodaj. Тогда, если возвращаемым результатом является успех, добавьте новый tr в таблицу через Jquery, иначе верните ошибку.

@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> 
} 

JS код

<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); 
     } 
    } 

Хотя я havnt протестировали код, но Approch должно быть.

+0

Я сделал все, как вы. В моей Profil.cshtml эта функция JavaScript никогда не вызывается. :( – acogrunge

+0

В чем проблема: вы видели консоль браузера, есть ли там ошибки javascript, можете ли вы отправить код, чтобы мы могли отлаживать и разрешать проблему. –

+0

Вот что я сделал: – acogrunge