2014-09-26 87 views
0

我有2页。首先我只有表单发布数据进行搜索,第二我也有相同的搜索和容器与搜索结果的形式。当我从第一个表单发布 - 模型到搜索方法来了我所期望的,但从第二个表单模型属性设置为默认值(int - 0,布尔 - 假,字符串 - null等)发布模型始终是空的

什么是问题?


首先FOM:

<form class="form-horizontal" action="@Url.Action("Search", "Home")" method="POST"> 
    @Html.ValidationSummary() 
    <fieldset> 

     <!-- Form Name --> 
     <legend>Search</legend> 

     <!-- Search input--> 
     <div class="form-group"> 
      <label class="col-md-4 control-label" for="CertID">Certificate ID</label> 
      <div class="col-md-4"> 
       <input id="CertID" name="CertID" type="search" placeholder="Certificate ID" class="form-control input-md" required=""> 

      </div> 
     </div> 

     <!-- Search input--> 
     <div class="form-group"> 
      <label class="col-md-4 control-label" for="CertAuthCode">Certificate AuthCode</label> 
      <div class="col-md-4"> 
       <input id="CertAuthCode" name="CertAuthCode" type="search" placeholder="Certificate AuthCode" class="form-control input-md" required=""> 

      </div> 
     </div> 
     <div class="form-group"> 
      <div class="col-md-offset-4 col-md-4"> 
       <div class="checkbox"> 
        <label> 
         <input type="checkbox" name="IncludePreviousQuestionnaire" value="true"> Include Previous Questionnaire? 
        </label> 
       </div> 
      </div> 
     </div> 

     <!-- Button --> 
     <div class="form-group"> 
      <label class="col-md-4 control-label" for="searchCert"></label> 
      <div class="col-md-4"> 
       <button id="searchCert" type="submit" class="btn btn-primary">Search</button> 
      </div> 
     </div> 

    </fieldset> 

第二形态:进行搜索请求

<form class="form-horizontal" action="@Url.Action("Search", "Home")" method="POST"> 
@Html.ValidationSummary() 
<fieldset> 

    <!-- Form Name --> 
    <legend>Search</legend> 

    <!-- Search input--> 
    <div class="form-group"> 
     @Html.LabelFor(m => m.SearchCertRequest.CertID, new { @class = "col-md-4 control-label" }) 
     @*<label class="col-md-4 control-label" for="CertID">Certificate ID</label>*@ 
     <div class="col-md-4"> 
      @Html.TextBoxFor(m => m.SearchCertRequest.CertID, new { @placeholder = "Certificate ID", @class = "form-control input-md", @required="required" }) 
      @*<input id="CertID" name="SearchCertRequest.CertID" type="search" placeholder="Certificate ID" class="form-control input-md" required="">*@ 
      @Html.ValidationMessageFor(m => m.SearchCertRequest.CertID) 
     </div> 
    </div> 

    <!-- Search input--> 
    <div class="form-group"> 
     @Html.LabelFor(m => m.SearchCertRequest.CertAuthCode, new { @class = "col-md-4 control-label" }) 
     @*<label class="col-md-4 control-label" for="CertAuthCode">Certificate AuthCode</label>*@ 
     <div class="col-md-4"> 
      @Html.TextBoxFor(m => m.SearchCertRequest.CertAuthCode, new { @placeholder = "Certificate AuthCode", @class = "form-control input-md", @required = "required" }) 
      @*<input id="CertAuthCode" name="SearchCertRequest.CertAuthCode" type="search" placeholder="Certificate AuthCode" class="form-control input-md" required="">*@ 
      @Html.ValidationMessageFor(m => m.SearchCertRequest.CertAuthCode) 
     </div> 
    </div> 
    <div class="form-group"> 
     <div class="col-md-offset-4 col-md-4"> 
      <div class="checkbox"> 
       <label> 
        @Html.CheckBoxFor(m=>m.SearchCertRequest.IncludePreviousQuestionnaire) 
        @*<input type="checkbox" name="SearchCertRequest.IncludePreviousQuestionnaire">*@ Include Previous Questionnaire? 
       </label> 
      </div> 
     </div> 
    </div> 

    <!-- Button --> 
    <div class="form-group"> 
     <label class="col-md-4 control-label" for="searchCertBtn"></label> 
     <div class="col-md-4"> 
      <button id="searchCertBtn" name="searchCertBtn" type="submit" class="btn btn-primary">Search</button> 
     </div> 
    </div> 

</fieldset> 

型号:

public class SearchCertRequest 
{ 
    [Required] 
    public long CertID { get; set; } 
    [Required] 
    public string CertAuthCode { get; set; } 
    public bool IncludePreviousQuestionnaire { get; set; } 
} 
存在模型对于第二个表格中下一个:

更新

public class SearchViewModel 
    { 
     public SearchCertModel CertModel { get; set; } // Serch Result 
     public SearchCertRequest SearchCertRequest { get; set; } // Search Request 
    } 

议决:我从搜索表单局部视图,现在它的工作。有人可以解释为什么吗?谢谢。

+0

什么是您的第二种形式的模型? (它是一个包含属性SearchCertRequest的类),所以你的post方法参数应该是该模型,而不是'SearchCertRequest' – 2014-09-26 10:18:18

+0

@StephenMuecke,是的。请检查更新 – demo 2014-09-26 10:24:24

回答

0

两种形式回发到相同的方法(Home控制器的检索方法)。如第一个正在工作的签名必须是

[HttpPost] 
public ActionResult (SearchCertRequest model) 
{ 

但所述第二形式是生成控制用于SearchViewModel所以签名将必须

[HttpPost] 
public ActionResult (SearchViewModel model) 
{ 

编辑

要解释你的EDI评论吨。用第二种形式生成控件,如<input name="SearchCertRequest.CertID" ...>。当您创建一个局部视图并将它SearchCertRequest属性SearchViewModel,它将生成控件,如<input name="CertID" ...>这将正确地回发到public ActionResult (SearchCertRequest model)

+0

也许我不明白你的评论。这是有道理的,谢谢。 – demo 2014-09-26 10:40:39