2012-10-21 30 views
1

我有一個控制器設置爲1模型屬性,但在我看來,我認爲它是0和1這取決於我如何訪問它。MVC4查看模型int屬性是1但HTML呈現爲0?

查看片段(這些線是絕對連續的呢!)

@Html.DisplayFor(model => model.resumeStage)  
@Html.HiddenFor(model => model.resumeStage) 
@Html.EditorFor(model => model.resumeStage) 

渲染HTML

1 
<input value="0" data-val="true" data-val-number="The field resumeStage must be a number." data-val-required="The resumeStage field is required." id="resumeStage" name="resumeStage" type="hidden" /> 
<input value="0" class="text-box single-line" id="resumeStage" name="resumeStage" type="number" /> 

應該不是值(我在爲便於閱讀標籤的前面移動的value=)總是1?當我將其呈現在文本框中時,我似乎失去了該屬性的狀態!視圖控制器通過被定義爲

public class CreateUserModel 
{ 
    [Required] 
    public int resumeStage { get; set; } // <== problem 

    public LocalProfile newLocalUser { get; set; } 
    public ExtProfile newExtUser { get; set; } 

    public CreateUserModel() 
    { 
     resumeStage = 0; 
     newLocalUser = new LocalProfile(); 
     newExtUser = new ExtProfile(); 
     preFillWithTestData(); 
    } 

    private void preFillWithTestData() 
    { 
     // prefill the newLocalUser 
     // and newExtUser classes with dummy data 
    } 
} 

控制器方法接收表單POST(其中I 0 => 1翻轉INT)的模型類強結合是:

[HttpPost] 
public ActionResult UserRegistration(CreateUserModel newUser) 
{ 
    try 
    { 
     //stage 0, setup local account 
     if (newUser.resumeStage <= 0) 
     { 
      // do stuff 
      newUser.resumeStage = 1; 
     } 

     // stage 1, setup external account 
     if (newUser.resumeStage <= 1) 
     { 
      // test an exception 
      Exception ex = new Exception("TEST: External service provider offline"); 
      throw ex; 
      newUser.resumeStage = 2; 
     } 

     return RedirectToAction("Index"); 
    } 
    catch (Exception ex) 
    { 
     return View(newUser); // newUser.resumeStage is 1 here but 
           // view will disagree 
    } 
} 

控制器方法創建和呈現形式是:

public ActionResult UserRegistration() 
{ 
    // Constructor prefills with test data, nothing more to do 
    CreateUserModel newUser = new CreateUserModel(); 

    return View(newUser); 
} 

問題:有誰知道爲什麼我似乎不能顯示爲resumeStage有1在HTML呈現的文本框內?

回答

1

您應該添加ModelState.Remove("resumeStage");或添加一個調用ModelState.Clear();

catch (Exception ex) 
{ 
    ModelState.Remove("resumeStage"); 
    return View(newUser); // newUser.resumeStage is 1 here but 
          // view will disagree 
} 
+0

好奇。爲什麼需要?似乎是一個任意的解決方法...... – DeepSpace101

+1

找到在http://stackoverflow.com/questions/1775170/asp-net-mvc-modelstate-clear ...的原因,它是一個非常奇怪的MVC行爲! – DeepSpace101