2016-12-04 70 views
1

我有一個控制器,它包含一個if語句,但它應該無關緊要,因爲它們都返回相同的類型,所以它碰到第一個或第二個塊。控制器不返回PartialView?

[HttpPost] 
public ActionResult Descriptions(string partsNo, Details searchValue) 
{ 
    var response = partsNo != null ? _referenceRepository.GetParts(partsNo) : _referenceRepository.SearchValue(searchValue); 

    return PartialView(response); 
} 

查看

@model ArrowEngineeringMVC.Models.Details 

<script> 
    $(document) 
     .on("click", 
      ".getPartNo", 
      function (e) { 
       var val = $(this).val(); 
       $.ajax({ 
        url: '/Home/Descriptions', 
        contentType: 'application/json', 
        type: 'POST', 
        data: JSON.stringify({ "partsNo": val }), 
        dataType: 'html' 
       }) 
        .success(function (result) { 
         $('#descriptionPlace').html(result); 
        }) 
        .error(function (xhr, status) { 
         alert(status); 
        }); 
      }) 
</script> 

@using (Html.BeginForm("Descriptions", "Home", FormMethod.Post)) 
{ 
    <div class="topBar"> 
     @Html.TextBoxFor(m => m.Type) 
     <input type="submit" id="submitId" value="submit"/> 
    </div> 
} 

    <div class="leftPanel"> 
     <button href="javascript:void(0)" id="NumbersButton" value="Number" class="getPartNo">#</button> 
     <button href="javascript:void(0)" value="A" class="getPartNo">A</button> 
     <button href="javascript:void(0)" value="B" class="getPartNo">B</button> 
     <button href="javascript:void(0)" value="C" class="getPartNo">C</button> 
    </div> 

    <div id="descriptionPlace"></div> 

如果你點擊一個按鈕,將打if語句的第一部分。如果你這樣做,然後返回一個PartialView,並且一切正常,按鈕的值將被傳遞給使用AJAX的控制器,而如果您執行搜索,它將通過模型傳遞,這是唯一的區別。

如果您執行搜索,它會碰到if語句的第二部分,該語句不會返回部分視圖,只是由於某種原因返回新視圖。

我只是困惑,因爲變量響應返回一個列表,但只是包含不同的值,取決於你打的if語句的哪一部分。

繼承人位referenceRepository只是爲了更容易理解:

public List<Parts> SearchValue(Details searchValue) 
{ 
    const string detailsSql = "SELECT [ID], [Description] FROM Table1 WHERE [Type] = {0}"; 
    string queryDetails = string.Format(detailsSql, searchValue.Type); 

    var dbDetails = getConnection().Query<Parts>(queryDetails).ToList(); 

    return dbDetails; 
} 

public List<Parts> GetParts(string partNumber) 
{ 
    string partsSql; 
    if (partNumber == "Number") 
    { 
     partsSql = "SELECT [ID], [Description] FROM Table1 WHERE [Part Number] not like '%[^0-9]%'"; 
    } 
    else 
    { 
     partsSql = "SELECT [ID], [Description] FROM Table1 WHERE [Part Number] like '{0}%'"; 
    } 

    string queryParts = string.Format(partsSql, partNumber); 

    var dbParts = getConnection().Query<Parts>(queryParts).ToList(); 

    return dbParts; 
} 
+1

@GSerg細節是我創建的一個對象,其中包含一個名爲Type的屬性,我將整個模型發回控制器並且Type屬性將被填充 –

+0

我想我誤解了你的問題描述。顯然你說的是由窗體返回的局部視圖替換整個頁面,而不是進入'#descriptionPlace'。這是正確的,當你提交表單時,瀏覽器顯示它作爲新頁面返回的內容。它不知道這不是一個「完整」的觀點。如果你想讓表單發佈的結果進入'#descriptionPlace',你需要攔截表單的'submit',就像截獲'click'一樣,或者使用帶有合適參數的'Ajax.BeginForm'。 – GSerg

+0

@GSerg哦,謝謝你,你知道我將如何使用@ Html.BeginForm將其渲染到#descriptionPace中嗎? –

回答

0
,如果你想相同的結果上#descriptionPlace格局部視圖

提交click.then你可以嘗試這樣的刪除形式tag.and綁定提交按鈕的點擊事件以及那些getnumbers按鈕..

不需要發佈一個值?我對嗎?

如果你想具體加載部分視圖在div或特定區域,那麼你不得不提到像ajax call.or你可以使用@ Html.Partial或RenderPartial.But你的要求有點奇怪。所以你可以試試這樣..

相關問題