2

我正在(像往常一样)寻求有关如何使用此功能的建议。我有一个带有编辑框的页面,用户在其中提交带有输入的页面,其唯一目的是将其保存到记录中。但是我想要做的(避免重复)是首先在表中搜索任何 SIMILAR 记录,如果有任何类似的记录,我想将其返回给用户(在同一视图上)并问,你想要使用这些记录而不是保存新记录?

所以我有一个看法

<script type="text/javascript">
   $(document).ready(function(){
      $(function(){
         $('.submit-link').click(function(){
             /** not sure how to handle this **/
         });
      });
   });
</script>


<% using(Html.Beginform()){%>
   <%: Html.TextBoxFor(model => model.Name)
   <button type="submit" value="register name" class="submit-link">Submit</button>
<%}%>

<div class="search-results"></div>

我的控制器

public ActionResult New(){
   return View();
}


[HttpPOst]

public ActionResult New(FormCOllection collection){
   try{
    Profile profile = new Profile();
    TryupdateModel(profile);
    context.Profile.Add(profile);
    context.SaveChanges();
   }
catch(Exception ex)
{
}
   return View();
}

所以我的困境是,我不确定是否:

  1. 我应该将它发布到“新建”操作,然后在其中进行搜索,如果存在记录,我应该返回一个 json 格式的数据,以便我可以使用 jquery 无缝显示它,否则保存它然后重定向到同一页面。

  2. 或者,我是否应该将整个内容指向将处理搜索的 json 操作,如果找到某些内容,则返回到同一页面,否则保存然后返回。

我对后者的问题是,它需要一个 GET 操作,如果我有一个 get 操作,我不确定这是一个好习惯,然后是控制器中的一个单独的 JSon 类型方法。那有意义吗?

或者也许我只需要有人给我指出另一种解决方案

任何帮助表示赞赏!非常感谢!!

4

3 回答 3

2

为什么不使用jQuery Autocomplete 插件将现有项目填充为用户类型。因此,如果用户键入现有的自动完成将显示选项并且用户将选择它。现在,当用户从现有的(从自动完成的建议中)中选择时,您知道您不需要将其另存为新的。

这对用户来说是更少的工作

于 2012-08-15T13:04:53.730 回答
1

我只会做前者。如果记录存在,则返回 Json,否则返回重定向。我认为在同一方法中返回一种以上的 ActionResult 没有任何问题。也许外面的其他人认为这很草率,但我不这么认为。

我在很多项目中都看到过这样的事情:

[HttpPost]
public ActionResult MethodName()
{
    ....
    if(error)
        return Json(new { Error = "Error!" });
    else
        return RedirectToAction("NextStep");
}
于 2012-08-09T22:37:12.447 回答
1

1b怎么样?总是重定向,请检查服务器端,如果存在类似的重定向到显示类似的页面,否则重定向到保存后的页面。通过这种方式,您可以将一种场景与另一种场景解耦,更易于维护。唯一的缺点是额外的往返

于 2012-08-21T15:00:20.157 回答