2011-06-20 34 views
0

我目前正在開發ASP.NET MVC3網站。MVC3 - Form + POST =空參數

我有一個簡單的身份驗證表單,綁定在一個簡單的viewmodel上。在本地調試時,一切正常。

但是該網站也必須支持Apache + monomod。以下是我遇到的奇怪行爲:具有相同請求和參數的相同表單無法正常工作。

更多細節:

視圖模型:

/// <summary> 
/// Form authentication info 
/// </summary> 
public class LogOnModel 
{ 
    /// <summary> 
    /// 
    /// </summary> 
    [DisplayName("Username")] 
    public string UserName { get; set; } 

    /// <summary> 
    /// 
    /// </summary> 
    [DisplayName("Password")] 
    public string Password { get; set; } 

    /// <summary> 
    /// 
    /// </summary> 
    [DisplayName("Remember me?")] 
    public bool RememberMe { get; set; } 

    /// <summary> 
    /// Targeted URL 
    /// </summary> 
    public string Target { get; set; } 

    /// <summary> 
    /// 
    /// </summary> 
    public LogOnModel() 
    { 
    } 
} 

視圖的主要部分,頁面,用戶可以輸入用戶名和密碼:

<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage<Website.Areas.Public.Models.LogOnModel>" %> 
<p> 
    Please enter your username and password to continue. 
</p> 
<% using (Html.BeginForm()) 
    { %> 
<%= Html.ValidationSummary(true, "Authentication failed.")%> 
<p> 
    <%= Html.ActionLink("I forgot my password","PasswordRecovery","Home") %> 
</p> 
<div> 
    <fieldset> 
     <div class="editor-label"> 
      <%= Html.LabelFor(m => m.UserName) %> 
     </div> 
     <div class="editor-field"> 
      <%= Html.TextBoxFor(m => m.UserName) %> 
      <%= Html.ValidationMessageFor(m => m.UserName)%> 
     </div> 
     <div class="editor-label"> 
      <%= Html.LabelFor(m => m.Password)%> 
     </div> 
     <div class="editor-field"> 
      <%= Html.PasswordFor(m => m.Password) %> 
      <%= Html.ValidationMessageFor(m => m.Password) %> 
     </div> 
     <div class="editor-field"> 
      <%= Html.CheckBoxFor(m => m.RememberMe) %> 
      Remember me 
     </div> 
     <p> 
      <input type="submit" value="Connect me!" /> 
     </p> 
    </fieldset> 
</div> 
<% } %> 

和控制器,接收認證信息:

[HttpPost] 
    public ActionResult LogOn(LogOnModel model) 
    { 
     string username = model.UserName; 
     string password = model.Password; 

     //On Apache, username & password are empty 
     ... 
    } 

正如我在評論中說,用戶名密碼&是空的。在本地的ASP.NET調試服務器上一切正常,並使用Fiddler我可以看到身份驗證的請求包含表單數據(用戶名,密碼等)。

任何想法爲什麼綁定似乎不工作? 謝謝。

+0

嗯我可以使用HttpContext.Request.Form [「UserName」],等等的值...但它似乎不是很乾淨,我... – Valryon

回答

0

幾個月後剛剛找到我的答案。這有點晚,但如果有人有同樣的問題,這裏的解決方案:

清理Web.config文件。刪除每一行是optionnals

0

您使用的是哪種版本的單聲道?當我第一次嘗試在單聲道(2.4或2.6)上設置MVC 2站點時遇到了這個問題。我不記得是什麼原因超出了它是一個相當複雜的單聲道錯誤/實現的差異,因爲它已經被修復 - 在單聲道2.10.2上運行的MVC3/Razor按預期工作。

+0

好吧,我是使用Mono 2.10.2和MVC 3 – Valryon

+0

如果您使用mvc 1或2,您的網頁中是否有任何內容會失敗?單聲道程序集綁定與.net不同,因此使用錯誤的版本進行部分設置非常容易。 –

+0

我想不是,我甚至沒有使用剃刀視圖引擎(仍然使用舊的)。 Mono上的路由似乎與IIS上的路由完全不同。由於我只有一個默認路由,參數不匹配。 – Valryon