2016-12-04 4 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> 

Если нажать одну из кнопок, она попала в первую часть, если заявление. Если вы это сделаете, возвращается 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; 
} 
+1

@GSerg Details - это объект, который я создал, который содержит свойство Type, я отправляю всю модель обратно в контроллер и свойство Type будет заполнено. –

+0

. Я думаю, что неправильно понял ваш описание проблемы. Видимо, вы говорите, что частичное представление, возвращаемое формой, заменяет всю страницу, а не на «# descriptionPlace». Это верно, когда вы отправляете форму, браузер отображает все, что он возвращает, как новую страницу. Он не знает, что это не «полный» взгляд. Если вы хотите, чтобы результат сообщения формы попал в '# descriptionPlace', вам нужно перехватить форму' submit', как вы перехватываете 'click' или используете 'Ajax.BeginForm' с соответствующими параметрами. – GSerg

+0

@GSerg О, да, спасибо, знаете ли вы, как бы я превратил его в #descriptionPace, используя @ Html.BeginForm? –

ответ

0

если вы хотите такой же результат, как частичный вид в #descriptionPlace DIV на отправить click.then вы можете попробовать, как этот Вытащите form tag.and привязать событие click для кнопок отправки вместе с этими кнопками getnumbers.

Не требуется публикация для одного значения? я прав?

Если вы хотите указать частичный вид в div или конкретной области, то вы должны упомянуть как ajax call.or вы можете использовать @ Html.Partial или RenderPartial. Но ваше требование немного нечетное. Таким образом, вы можете попробовать вот так.