C# 控制器不返回PartialView?

C# 控制器不返回PartialView?,c#,model-view-controller,partial-views,C#,Model View Controller,Partial Views,我有一个控制器,它包含一个if语句,但它是否命中第一个或第二个块并不重要,因为它们都返回相同的类型 [HttpPost] public ActionResult Descriptions(string partsNo, Details searchValue) { var response = partsNo != null ? _referenceRepository.GetParts(partsNo) : _referenceRepository.SearchValue(search

我有一个控制器,它包含一个if语句,但它是否命中第一个或第二个块并不重要,因为它们都返回相同的类型

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

    return PartialView(response);
}
看法

如果单击其中一个按钮,它将命中If语句的第一部分。如果执行此操作,则会返回一个PartialView,并且一切正常,来自按钮的值使用AJAX传递给控制器,而如果执行搜索,则通过模型传递,这是唯一的区别

如果进行搜索,它会点击If语句的第二部分,该部分不会返回部分视图,但出于某种原因,它只会返回一个新视图

我只是感到困惑,因为变量响应返回一个列表,但只是包含不同的值,这取决于您点击if语句的哪个部分

这里有一点参考假设,只是为了更容易理解:

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中的部分视图相同的结果,请单击submit。然后可以像这样尝试删除表单标记。并将submit按钮的单击事件与getnumbers按钮绑定在一起

不需要发布一个值?我说得对吗


如果您想在div或特定区域中加载局部视图,那么您必须提到像ajax call。或者您可以使用@Html.partial或RenderPartial。但是您的要求有点奇怪。因此,您可以这样尝试。

如果您希望在提交单击时获得与descriptionPlace div中的部分视图相同的结果,那么您可以这样尝试删除表单标记。并将提交按钮的单击事件与这些GetNumber按钮绑定在一起

不需要发布一个值?我说得对吗


如果您想在div或特定区域中加载局部视图,那么您必须提到像ajax call。或者您可以使用@Html.partial或RenderPartial。但是您的要求有点奇怪。因此,您可以这样尝试。

@GSerg Details是我创建的一个对象,其中包含一个名为Type的属性,我正在将整个模型发回控制器,Type属性将被填充。我想我误解了您的问题描述。显然,您是说表单返回的部分视图替换了整个页面,而不是进入descriptionPlace。这是正确的,当您提交表单时,浏览器会将返回的任何内容显示为新页面。它不知道这不是一个完整的视图。如果您希望表单帖子的结果进入descriptionPlace,您需要像拦截点击一样拦截表单的提交,或者使用Ajax.BeginForm和适当的参数。@GSerg哦,是的,谢谢,您知道我将如何使用@Html.BeginForm将其呈现到DescriptionSpace中吗?您将为表单的提交事件创建另一个事件处理程序,就像您为按钮的单击事件创建的事件处理程序一样。或者您可以使用。@GSerg Details是我创建的一个对象,它包含一个名为Type的属性,我正在将整个模型发布回控制器,Type属性将被填充。我想我误解了您的问题描述。显然,您是说表单返回的部分视图替换了整个页面,而不是进入descriptionPlace。这是正确的,当您提交表单时,浏览器会将返回的任何内容显示为新页面。它不知道这不是一个完整的视图。如果您希望表单帖子的结果进入descriptionPlace,您需要像拦截点击一样拦截表单的提交,或者使用Ajax.BeginForm和适当的参数。@GSerg哦,是的,谢谢,您知道我将如何使用@Html.BeginForm将其呈现到DescriptionSpace中吗?您将为表单的提交事件创建另一个事件处理程序,就像您为按钮的单击事件创建的事件处理程序一样。或者你会用这个。
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;
}