C# 加载视图时添加了空记录
我是asp.NETMVC新手。在下面的代码中,我试图向数据库添加一条记录。它工作正常,但每次加载视图时都会向数据库中添加一条空记录 型号:C# 加载视图时添加了空记录,c#,asp.net-mvc,asp.net-mvc-2,C#,Asp.net Mvc,Asp.net Mvc 2,我是asp.NETMVC新手。在下面的代码中,我试图向数据库添加一条记录。它工作正常,但每次加载视图时都会向数据库中添加一条空记录 型号: public class multi { public int CategoryID { get; set; } public string CategoryName { get; set; } public string Description { get; set; } pu
public class multi
{
public int CategoryID { get; set; }
public string CategoryName { get; set; }
public string Description { get; set; }
public string DisplayName { get; set; }
public string Email { get; set; }
}
public class CategoryRepository
{
private BusDataClassesDataContext dc = new BusDataClassesDataContext();
public void Save()
{
dc.SubmitChanges();
}
public void AddMulti(multi mu)
{
tblCategory cat = new tblCategory();
cat.CategoryName = mu.CategoryName;
cat.Description = mu.Description;
tblUser user = new tblUser();
user.DisplayName = mu.DisplayName;
user.Email = mu.Email;
dc.tblCategories.InsertOnSubmit(cat);
dc.tblUsers.InsertOnSubmit(user);
}
}
CategoryRepository cat = new CategoryRepository();
public ActionResult AddMulti(multi mu)
{
if (ModelState.IsValid)
{
cat.AddMulti(mu);
cat.Save();
return View(mu);
}
else
{
return View(mu);
}
}
<% using (Html.BeginForm()) {%>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%: Html.LabelFor(model => model.CategoryName) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.CategoryName) %>
<%: Html.ValidationMessageFor(model => model.CategoryName) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Description) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Description) %>
<%: Html.ValidationMessageFor(model => model.Description) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.DisplayName) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.DisplayName) %>
<%: Html.ValidationMessageFor(model => model.DisplayName) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Email) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Email) %>
<%: Html.ValidationMessageFor(model => model.Email) %>
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink("Back to List", "Index") %>
</div>
控制器:
public class multi
{
public int CategoryID { get; set; }
public string CategoryName { get; set; }
public string Description { get; set; }
public string DisplayName { get; set; }
public string Email { get; set; }
}
public class CategoryRepository
{
private BusDataClassesDataContext dc = new BusDataClassesDataContext();
public void Save()
{
dc.SubmitChanges();
}
public void AddMulti(multi mu)
{
tblCategory cat = new tblCategory();
cat.CategoryName = mu.CategoryName;
cat.Description = mu.Description;
tblUser user = new tblUser();
user.DisplayName = mu.DisplayName;
user.Email = mu.Email;
dc.tblCategories.InsertOnSubmit(cat);
dc.tblUsers.InsertOnSubmit(user);
}
}
CategoryRepository cat = new CategoryRepository();
public ActionResult AddMulti(multi mu)
{
if (ModelState.IsValid)
{
cat.AddMulti(mu);
cat.Save();
return View(mu);
}
else
{
return View(mu);
}
}
<% using (Html.BeginForm()) {%>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%: Html.LabelFor(model => model.CategoryName) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.CategoryName) %>
<%: Html.ValidationMessageFor(model => model.CategoryName) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Description) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Description) %>
<%: Html.ValidationMessageFor(model => model.Description) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.DisplayName) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.DisplayName) %>
<%: Html.ValidationMessageFor(model => model.DisplayName) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Email) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Email) %>
<%: Html.ValidationMessageFor(model => model.Email) %>
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink("Back to List", "Index") %>
</div>
查看:
public class multi
{
public int CategoryID { get; set; }
public string CategoryName { get; set; }
public string Description { get; set; }
public string DisplayName { get; set; }
public string Email { get; set; }
}
public class CategoryRepository
{
private BusDataClassesDataContext dc = new BusDataClassesDataContext();
public void Save()
{
dc.SubmitChanges();
}
public void AddMulti(multi mu)
{
tblCategory cat = new tblCategory();
cat.CategoryName = mu.CategoryName;
cat.Description = mu.Description;
tblUser user = new tblUser();
user.DisplayName = mu.DisplayName;
user.Email = mu.Email;
dc.tblCategories.InsertOnSubmit(cat);
dc.tblUsers.InsertOnSubmit(user);
}
}
CategoryRepository cat = new CategoryRepository();
public ActionResult AddMulti(multi mu)
{
if (ModelState.IsValid)
{
cat.AddMulti(mu);
cat.Save();
return View(mu);
}
else
{
return View(mu);
}
}
<% using (Html.BeginForm()) {%>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%: Html.LabelFor(model => model.CategoryName) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.CategoryName) %>
<%: Html.ValidationMessageFor(model => model.CategoryName) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Description) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Description) %>
<%: Html.ValidationMessageFor(model => model.Description) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.DisplayName) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.DisplayName) %>
<%: Html.ValidationMessageFor(model => model.DisplayName) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Email) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Email) %>
<%: Html.ValidationMessageFor(model => model.Email) %>
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink("Back to List", "Index") %>
</div>
领域
model.CategoryName)%%>
model.CategoryName)%%>
model.CategoryName)%%>
型号(说明)%>
型号(说明)%>
型号(说明)%>
model.DisplayName)%%>
model.DisplayName)%%>
model.DisplayName)%%>
型号(电子邮件)%>
型号(电子邮件)%>
型号(电子邮件)%>
这是因为您没有对模型进行验证,所以ModelState.IsValid
始终为真。然后通过AddMulti
添加新类别。因为此控制器方法是唯一指定的方法,所以它同时用于GET和POST请求。这意味着,每次加载页面并呈现表单时,都会使用模型中的空值创建一个新记录
尝试将控制器拆分为HttpPost
和HttpGet
方法:
[HttpPost]
public ActionResult AddMulti(multi mu)
{
if (ModelState.IsValid)
{
cat.AddMulti(mu);
cat.Save();
return View(mu);
}
else
{
return View(mu);
}
}
[HttpGet]
public ActionResult AddMulti()
{
return View();
}
现在,当您通过GET请求访问页面时(即,在发布表单之前首次访问页面时),将触发第二个操作方法,因此您不会创建新记录
您可能还需要向模型添加一些验证属性。因为它看起来像是将域模型直接传递给视图,所以您还应该考虑创建单独的视图。这是因为您没有对模型进行验证,所以
ModelState.IsValid
始终为真。然后通过AddMulti
添加新类别。因为此控制器方法是唯一指定的方法,所以它同时用于GET和POST请求。这意味着,每次加载页面并呈现表单时,都会使用模型中的空值创建一个新记录
尝试将控制器拆分为HttpPost
和HttpGet
方法:
[HttpPost]
public ActionResult AddMulti(multi mu)
{
if (ModelState.IsValid)
{
cat.AddMulti(mu);
cat.Save();
return View(mu);
}
else
{
return View(mu);
}
}
[HttpGet]
public ActionResult AddMulti()
{
return View();
}
现在,当您通过GET请求访问页面时(即,在发布表单之前首次访问页面时),将触发第二个操作方法,因此您不会创建新记录
您可能还需要向模型添加一些验证属性。因为看起来您将域模型直接传递给视图,所以您还应该考虑创建单独的。您的模型中是否缺少
[必需的]
?您的模型中是否缺少[必需的]
?您好,我在我的控制器方法中添加了HttpPost。现在我得到了“404页面未找到错误”这是因为您还需要创建我上面展示的HttpGet
方法。既然您以前的方法是POST only,那么除非您创建一个单独的方法,否则就没有什么可以处理GET请求了。我在哪里添加这个方法?无法在同一个cotroller类上添加具有相同参数类型的方法HI-尝试添加不带参数的方法(请参见上面的编辑),因为在GET请求期间您无论如何都不需要这些参数。没问题-也值得记住,传统上,GET和POST请求使用不同的方法,因为它们有不同的用途(第一个用于显示表单,第二个用于处理提交)。您好,我在我的控制器方法中添加了HttpPost。现在我得到了“404页面未找到错误”这是因为您还需要创建我上面展示的HttpGet
方法。既然您以前的方法是POST only,那么除非您创建一个单独的方法,否则就没有什么可以处理GET请求了。我在哪里添加这个方法?无法在同一个cotroller类上添加具有相同参数类型的方法HI-尝试添加不带参数的方法(请参见上面的编辑),因为在GET请求期间您无论如何都不需要这些参数。没问题-也值得记住,GET和POST请求通常有单独的方法,因为它们有不同的用途(第一个用于显示表单,第二个用于处理提交)。