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;
}
@GSerg細節是我創建的一個對象,其中包含一個名爲Type的屬性,我將整個模型發回控制器並且Type屬性將被填充 –
我想我誤解了你的問題描述。顯然你說的是由窗體返回的局部視圖替換整個頁面,而不是進入'#descriptionPlace'。這是正確的,當你提交表單時,瀏覽器顯示它作爲新頁面返回的內容。它不知道這不是一個「完整」的觀點。如果你想讓表單發佈的結果進入'#descriptionPlace',你需要攔截表單的'submit',就像截獲'click'一樣,或者使用帶有合適參數的'Ajax.BeginForm'。 – GSerg
@GSerg哦,謝謝你,你知道我將如何使用@ Html.BeginForm將其渲染到#descriptionPace中嗎? –