У меня есть контроллер, который содержит оператор 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>
Если нажать одну из кнопок, она попала в первую часть, если заявление. Если вы это сделаете, возвращается PartialView, и все работает нормально, значение от кнопки передается контроллеру с использованием AJAX, тогда как если вы выполняете поиск, он передается через модель, это единственное различие.
Если вы выполните поиск, он попадает во вторую часть инструкции if, которая не возвращает частичный вид, по какой-то причине просто возвращает новый вид.
Я просто смущен, потому что переменная ответ возвращает список, но содержит только разные значения в зависимости от того, какую часть оператора if вы попадаете.
Heres немного от 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 Details - это объект, который я создал, который содержит свойство Type, я отправляю всю модель обратно в контроллер и свойство Type будет заполнено. –
. Я думаю, что неправильно понял ваш описание проблемы. Видимо, вы говорите, что частичное представление, возвращаемое формой, заменяет всю страницу, а не на «# descriptionPlace». Это верно, когда вы отправляете форму, браузер отображает все, что он возвращает, как новую страницу. Он не знает, что это не «полный» взгляд. Если вы хотите, чтобы результат сообщения формы попал в '# descriptionPlace', вам нужно перехватить форму' submit', как вы перехватываете 'click' или используете 'Ajax.BeginForm' с соответствующими параметрами. – GSerg
@GSerg О, да, спасибо, знаете ли вы, как бы я превратил его в #descriptionPace, используя @ Html.BeginForm? –