2016-09-26 19 views
-1
具有2個超鏈接

以及IM:使用方法與HREF

<a href="@Url.Action("Fr", "Home")">Fr</a> 
         | 
    <a href="@Url.Action("Ang", "Home")">Ang</a> 
在我的控制器

我用這個改變當前langage

[HttpPost] 
public ActionResult Fr() 
{ 
    ContentModelView CMV = new ContentModelView(); 
    //Langue: 
    int CurrentLanguageid = db.Langues.FirstOrDefault(x => x.active_langue == "true").id_langue; 
    Langues LangueA = db.Langues.Find(CurrentLanguageid); 
    LangueA.active_langue = "false"; 

    db.SaveChanges(); 
    int NextLanguage = db.Langues.FirstOrDefault(x => x.txt_langue == "fr").id_langue; 
    Langues LangueB = db.Langues.Find(CurrentLanguageid); 
    LangueB.active_langue = "true"; 

    db.SaveChanges(); 



    return (RedirectToAction("../Home/Index")); 
} 

[HttpPost] 
public ActionResult Ang() 
{ 

    ContentModelView CMV = new ContentModelView(); 
    //Langue: 
    int CurrentLanguageid = db.Langues.FirstOrDefault(x => x.active_langue == "true").id_langue; 
    Langues LangueA = db.Langues.Find(CurrentLanguageid); 
    LangueA.active_langue = "false"; 

    db.SaveChanges(); 
    int NextLanguage = db.Langues.FirstOrDefault(x => x.txt_langue == "en").id_langue; 
    Langues LangueB = db.Langues.Find(CurrentLanguageid); 
    LangueB.active_langue = "true"; 

    db.SaveChanges(); 

    return (RedirectToAction("../Home/Index")); 
} 

但我不知道如果即時通訊不得不使用一個parametre在我梅索德因爲它秒的httpost,它甚至迫使該方法在數據庫IM這個問題的鏈接元素上掙扎

+1

'了'是用來做'GET'請求,不'POST' - 你已經證明什麼甚至不會工作。 – kiziu

+0

嗯,你會建議我使用這個問題嗎?因爲I M必須在數據庫編輯活躍langage –

+0

你設置'NextLanguage',但在接下來的行使用'CurrentLanguageid'。我懷疑那裏有一些問題。此外,「RedirectToAction」不採用路徑,而是採用(操作方法的)方法名稱,如果與當前不同,則可能採用控制器名稱。 –

回答

1

點擊無變化之後送我到/ home/FR不是指數(ANCH或標記)將發出一個GET請求。您的操作方法用HttpPost標記,並且它不會從您通過單擊鏈接生成的GET操作請求中被點擊。你有兩個選擇

  1. 變化從操作方法
  2. 劫持的鏈接點擊事件刪除[HttpPost]裝飾,使一個HTTP POST ajax調用。

此外我注意到,除了在where子句中使用的語言代碼之外,您在兩種方法中都有重複的代碼。爲什麼不使用帶有可以傳遞語言代碼的參數的單個方法?

public ActionResult UpdateLanguage(string id) 
{ 
    //This is your existing code. I did not verify the correctness of this! 
    var CMV = new ContentModelView(); 
    //Langue: 
    int CurrentLanguageid = db.Langues.FirstOrDefault(x => x.active_langue == "true") 
                       .id_langue; 
    Langues LangueA = db.Langues.Find(CurrentLanguageid); 
    LangueA.active_langue = "false"; 

    db.SaveChanges(); 
    int NextLanguage = db.Langues.FirstOrDefault(x => x.txt_langue == id).id_langue; 
    Langues LangueB = db.Langues.Find(CurrentLanguageid); 
    LangueB.active_langue = "true"; 

    db.SaveChanges(); 

    if(Request.IsAjaxRequest()) 
     return Json(new { status="success"},JsonRequestBehavior.AllowGet); 

    return RedirectToAction("Index","Home"); 
} 

現在,爲了使Ajax調用,你可能只是一個CSS類添加到鏈接

<a class="languageLink" href="@Url.Action("UpdateLanguage", "Home",new {id="fr"})">Fr</a> 
<a class="languageLink" href="@Url.Action("UpdateLanguage", "Home",new {id="en"})">En</a> 

現在的JS代碼劫持鏈接點擊事件,使Ajax調用

$(function(){ 

    $("a.languageLink").click(function(){ 

    $.post($(this).attr("href"),function(data){ 
     window.location.href="@Url.Action("Index","Home")"; 
    }); 

    }); 

}); 
+0

非常感謝花花公子工作得很好,但仍然有更新數據的問題,即使在方法active_langue db.savechanges不在數據庫更改 –

+0

@YounessBenbiga用'LANGUES LangueB = db.Langues.Find(CurrentLanguageid)'的LangueB是與LangueA相同。你想'Langues LangueB = db.Langues.Find(NextLanguage)' –

+0

!!沒有看到它thnx人! –