我正在寻求关于如何处理此功能的建议(像往常一样)。我有一个页面,其中有编辑框,用户在页面中提交输入,其唯一目的是将其保存到记录中。但我想做的(避免重复)是先搜索表格中的任何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();
}
所以我的困境是,我不确定是否:
我应该将它发布到“新”动作,然后在其中间进行搜索,如果记录存在,我应该返回一个json格式数据,这样我就可以使用jquery无缝地显示它,然后保存它然后重定向到同一页面。
或者,我应该将整个事情指向一个将处理搜索的json操作,如果找到了某些内容,则返回到同一页面,然后保存然后返回。
我对后者的问题是,它需要一个GET动作,如果我有一个get,那么我不确定这是一个好习惯,然后在控制器中有一个单独的JSon类型方法。这有意义吗?
或许我只是需要有人指出我的另一种解决方案
任何帮助表示赞赏!非常感谢!!
答案 0 :(得分:2)
为什么不使用jQuery Autocomplete plugin将现有项目填充为用户类型。因此,如果用户键入现有的自动填充功能,则会显示选项,用户将选择该选项。现在,当用户从现有选项(从自动填充建议中)中进行选择时,您知道不需要将其另存为新内容。
这对用户而言不那么重要
答案 1 :(得分:1)
我会做前者。如果记录存在,则返回Json,否则返回重定向。我没有看到在同一方法中返回多种ActionResult有什么问题。也许那里的其他人认为这很邋,,但我不这么认为。
我在很多项目中都看到过这样的事情:
[HttpPost]
public ActionResult MethodName()
{
....
if(error)
return Json(new { Error = "Error!" });
else
return RedirectToAction("NextStep");
}
答案 2 :(得分:1)
1b怎么样?总是重定向,检查服务器端,如果存在类似的重定向到显示类似的页面,否则重定向到后保存页面。这样,您可以将一个场景与另一个场景分离,更易于维护。只有con是额外的往返