在提交之前,价值被分成两半

时间:2014-03-01 18:43:33

标签: asp.net sql asp.net-mvc asp.net-mvc-3

我正在使用文本框更新用户记录,它向数据库提交半名称,例如如果Name是'John Mathew',那么它只提交'John'。 EVen我检查了从Textbox发送到行动的值已完成但提交了一半,为什么?我注意到,我的文本框被绑定到数据库中的EmplName字段,它从那里选择了一半的名字,在值中它显示了半名称,这就是为什么它提交半名称为什么?

这一行:

控制器:

 public ActionResult InsertEmployeeEditedDetail(String EmpName, String DeptID, String ShiftId, String EntryDate, String Salary, String Email, bool Approval)
        {
            int? EmplId = Convert.ToInt32(Session["EmpEdit"]);
            var UpdateRec = DataContext.UpdateEmployeeDetails_Sp(EmplId, EmpName, DeptID, ShiftId, EntryDate, Salary, Email, Approval);
            return View();
        }

查看:

@using EmployeeAttendance_app.Models
@model IEnumerable<GetEmployeeEditDetails_SpResult>

@{
    var Item = Model.FirstOrDefault();
 }

<style type="text/css">

</style>
<div>
@using (Html.BeginForm("InsertEmployeeEditedDetail", "Home", FormMethod.Post))
{
  <label id="lblName" class="editEmp_label">Name</label>
  <input type="text" value= @Item.EmplName  name="EmpName" placeholder="Update Name" />
  <br />
  <label id="lblDept" class="editEmp_label">Department</label>
  @Html.DropDownList("DeptID", @Item.DeptName)
  <br />
  <label id="lblShift" class="editEmp_label">Shift</label>
  @Html.DropDownList("ShiftId", @Item.ShiftName)
  <br />
  <label id="lblEntryDate" class="TxtBoxFrom editEmp_label">Entry Date</label>
  <input type="text" value= @Item.EntryDate class="TxtBoxTo" name="EntryDate" placeholder="Update Date"  />
  <br />
  <label id="lblSalary" class="editEmp_label">Salary</label>
  <input type="text" value= @Item.BasicSalary  name="Salary" placeholder="Update Salary"   />
  <br />
  <label id="lblEmail" class="editEmp_label">Email</label>
  <input type="text" value= @Item.EmailAdd  name="Email" placeholder="Update Email"   />
  <br />
  <label id="lblApproved" class="editEmp_label">Overtime Approval</label>
  @Html.CheckBox("Approval", @Convert.ToBoolean( @Item.OvertimeApproved))
  <br />
  <button type="submit" id="btnUpdate" class="button_AdminPanel" style="width:75px" name="btnSubmit">Update</button>  

}

存储过程:

PROCEDURE [dbo].[UpdateEmployeeDetails_Sp]
    @Emplid int,
    @EmplName varchar(40),
    @DeptId char(36),
    @ShiftId char(40),
    @EntryDate char(10),
    @Salary varchar(50),
    @EmailAdd varchar(50),
    @OvertimeApproval bit


AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    Update HrEmployee 
    Set EmplName = @EmplName, EntryDate=@EntryDate, BasicSalary=@Salary, 
                   EmailAdd=@EmailAdd, OvertimeApproved= @OvertimeApproval, 
                   DeptID=@DeptId, ShiftID=@ShiftId
                   where EmplID =@Emplid

END

3 个答案:

答案 0 :(得分:1)

将值属性值括在double quots value =“@ Item.EmplName”中。如果名称中有空格,则姓氏(空格后)将成为输入控件的属性,该控件不可见且无法发回。

答案 1 :(得分:1)

如果使用@Html.TextBoxFor()会更好,这也会处理绑定,而不是使用'value'明确设置文本框值

答案 2 :(得分:0)

鉴于您的所有代码看起来都足够合理,我只能想到几个可能性:

  1. 也许从DataContext调用存储过程的代码具有EmplName的参数长度,因为它更短。
  2. 也许数据库表有一个操纵该列值的触发器。
  3. 当您从数据库中检索数据并显示数据时,可能出现问题 - 比如输出参数太短 -