簡體   English   中英

控制器沒有返回PartialView?

[英]Controller not returning PartialView?

我有一個控制器,它包含一個if語句但是如果它遇到第一個或第二個塊則無關緊要,因為它們都返回相同的Type。

[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語句的第二部分而不返回部分視圖,它只是出於某種原因返回一個新視圖。

我只是感到困惑,因為變量響應返回一個List但只包含不同的值,具體取決於你命中的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;
}

如果你想在提交點擊的#descriptionPlace div中得到與部分視圖相同的結果。那么你可以嘗試這樣刪除表格標簽。並綁定提交按鈕的點擊事件以及那些getnumbers按鈕..

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM