C# 为什么在MVC中重复插入数据,但不返回异常?
我有一个在MVC4中RazorView引擎的数据库中插入记录的场景。我的数据正在插入,但重复了多次。我不知道为什么会这样。代码如下所示。我还想显示是否保存了数据,但我的代码没有显示我试图实现的信息,但这不起作用 型号C# 为什么在MVC中重复插入数据,但不返回异常?,c#,asp.net,sql-server,asp.net-mvc,razor,C#,Asp.net,Sql Server,Asp.net Mvc,Razor,我有一个在MVC4中RazorView引擎的数据库中插入记录的场景。我的数据正在插入,但重复了多次。我不知道为什么会这样。代码如下所示。我还想显示是否保存了数据,但我的代码没有显示我试图实现的信息,但这不起作用 型号 public class ContactUs { public int SenderId { get; set; } [Required(ErrorMessage ="Please enter your name")] [Display(Name="Ent
public class ContactUs
{
public int SenderId { get; set; }
[Required(ErrorMessage ="Please enter your name")]
[Display(Name="Enter your Name")]
[StringLength(50,MinimumLength =3,ErrorMessage ="Name must be between 3 and 50 characters!")]
public string Name { get; set; }
[Required(ErrorMessage ="Please enter your email address")]
[Display(Name="Enter your email address")]
[MaxLength(200,ErrorMessage ="Excedding Limit")]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
[Required(ErrorMessage ="Please enter Subject")]
[Display(Name ="Enter subject")]
public string CompanyName { get; set; }
[Required(ErrorMessage ="Please enter your message")]
[Display(Name="Enter your message")]
[DataType(DataType.Text)]
public string Message { get; set; }
}
.cshtml代码
@using (Ajax.BeginForm("SendMail", "Home", new AjaxOptions
{
HttpMethod = "POST",
UpdateTargetId = "target",
OnFailure = "ShowError()",
OnSuccess = "ShowSuccess()"
}))
{
<fieldset>
<legend>Fill the form below and we will contact you soon</legend>
<p>
@Html.LabelFor(model => model.Name)<br/>
<span class="wpcf7-form-control-wrap your-name">
@Html.TextBoxFor(model => model.Name, new { @class = "wpcf7-form-control wpcf7-text wpcf7-validates-as-required" })
@Html.ValidationMessageFor(model => model.Name)
</span>
</p>
<p>
@Html.LabelFor(model => model.Email)<br>
<span class="wpcf7-form-control-wrap your-email">
@Html.TextBoxFor(model => model.Email,new { @class= "wpcf7-form-control wpcf7-text wpcf7-email wpcf7-validates-as-required wpcf7-validates-as-email" })
@Html.ValidationMessageFor(model => model.Email)
</span>
</p>
<p>
@Html.LabelFor(model => model.CompanyName)<br>
<span class="wpcf7-form-control-wrap your-subject">
@Html.TextBoxFor(model => model.CompanyName, new {@class= "wpcf7-form-control wpcf7-text"})
@Html.ValidationMessageFor(model => model.CompanyName)
</span>
</p>
<p>
@Html.LabelFor(model => model.Message)<br>
<span class="wpcf7-form-control-wrap your-message">
@Html.TextAreaFor(model => model.Message, new {@class= "wpcf7-form-control wpcf7-textarea"})
@Html.ValidationMessageFor(model => model.Message)<br />
</span>
</p>
<p><input type="submit" value="Send Message" class="wpcf7-form-control wpcf7-submit">
<img class="ajax-loader" src="http://www.thomasclaudiushuber.com/wp-content/plugins/contact-form-7/images/ajax-loader.gif" alt="Sending ..." style="visibility: hidden;"></p>
<div class="wpcf7-response-output wpcf7-display-none"></div>
</fieldset>
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
<script>
function ShowError() {
$("#status").removeClass();
$("#status").addClass("alert alert-error");
$("#status").html("<strong>Error!</strong> There was an error posting the contact form. Please try again later.");
}
function ShowSuccess() {
$("#target").removeClass();
$("#target").addClass("alert alert-success");
}
</script>
public ActionResult SendMail(ContactUs form)
{
string retValue = "There was an error submitting the form, please try again later.";
if (!ModelState.IsValid)
{
return Content(retValue);
}
if (ModelState.IsValid)
{
try
{
DataAccessLayer.DBdata objDB = new DataAccessLayer.DBdata();
bool result = objDB.InsertData(form);
if (result == true)
{
retValue = "Your Request for Contact was submitted successfully. We will contact you shortly.";
}
else
{
retValue = "There is some problem in saving data. Please try again later.";
}
}
catch (Exception)
{
throw;
}
}
return Content(retValue);
}
插入数据库的功能
public bool InsertData(ContactUs contact)
{
SqlConnection con = null;
string result = "";
try
{
con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnection"].ToString());
SqlCommand cmd = new SqlCommand("UserMail_InsertUpdateDelete", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@SenderId", 0);
// i will pass zero to MobileID beacause its Primary .
cmd.Parameters.AddWithValue("@SenderName", contact.Name);
cmd.Parameters.AddWithValue("@EmailAddress", contact.Email);
cmd.Parameters.AddWithValue("@CompanyName", contact.CompanyName);
cmd.Parameters.AddWithValue("@SenderMessage", contact.Message);
cmd.Parameters.AddWithValue("@SentDateTime", DateTime.Now);
cmd.Parameters.AddWithValue("@Query", 1);
con.Open();
result = cmd.ExecuteScalar().ToString();
return true;
}
catch
{
return false;
}
finally
{
con.Close();
}
}
SP
Create proc UserMail_InsertUpdateDelete
@SenderId Bigint =0 ,
@SenderName varchar(50) =null,
@EmailAddress varchar(200)=null,
@CompanyName varchar(50)=null,
@SenderMessage varchar(500)=null,
@SentDateTime datetime=null,
@Query int
as
begin
if(@Query=1)
begin
insert into UserMail
(
SenderName,
EmailAddress,
CompanyName,
SenderMessage,
SentDateTime
)
values
(
@SenderName,
@EmailAddress,
@CompanyName,
@SenderMessage,
@SentDateTime
)
if(@@ROWCOUNT>0)
begin
select 'Insert'
end
end
if(@Query=2)
begin
update UserMail
set
SenderName=@SenderName,
EmailAddress=@EmailAddress,
CompanyName=@CompanyName,
SenderMessage=@SenderMessage
where SenderId=@SenderId
select 'Update'
end
if(@Query=3)
begin
Delete from UserMail where SenderId=@SenderId
select 'Deleted'
end
if(@Query=4)
begin select * from UserMail
end
end
if(@Query=5)
begin
select * from UserMail where SenderId=@SenderId
end
请将SP设置为1)在您的代码中设置断点,以查看表单是否多次提交2)如果没有,请将您的SP更改为仅包含插入步骤,并查看这是否适用于您。理想情况下,每个操作都有一个sp