【问题标题】:Dropdownlist not working下拉列表不起作用
【发布时间】:2017-07-03 06:43:53
【问题描述】:

为什么属性DEPARTMENTID在创建时没有插入到数据库中,我使用的是Dropdownlist 请参阅下面的代码,这是我的所有代码,我需要您的想法来更正我的代码。

控制器

// GET: /Budget/Create
public ActionResult Create()
{
var name = User.Identity.GetUserName();

var userroles = _roleDataContext.USERROLEs.Where(u => u.USERNAME.ToLower().Trim() == name.ToLower().Trim() && u.ROLE.Trim() == "6");

var rolegroup = from u in userroles.ToList()
join rg in _roleDataContext.ROLEGROUPs.ToList()
on u.ROLEID equals rg.ROLEID
select rg;

var usergroup = (from rg in rolegroup.ToList()
join ug in _roleDataContext.USERGROUPs.ToList()
on rg.GROUPID equals ug.GROUPID
select ug).OrderBy(i => i.DEPTCODE);

var listSelectitem = usergroup.Select(@group => new SelectListItem
{
Selected = true,
Text = @group.DEPTCODE.Length > 20 ? @group.DEPTCODE.Substring(0, 20) : @group.DEPTCODE,
Value = @group.DEPTCODE
}).ToList();

var firstOrDefault = usergroup.FirstOrDefault();
if (firstOrDefault != null)
{
ViewBag.DeptList = new SelectList(listSelectitem, "Value", "Text", firstOrDefault.DEPTCODE);
}
return View();
}

// POST: /Budget/Create
[HttpPost]
public ActionResult Create(BudgetViewModel model , int month = 1, int year = 2017)
{
// TODO: Add insert logic here
model.DATETIME = DateTime.Now;
BudgetDb.insert(model);
return RedirectToAction("Index");
}

查看

@model WarehouseRtoRSystem.Models.BudgetViewModel

@{
    ViewBag.Title = "Create";
}
<style>
    .col-md-10 {
        clear: both;
        padding-left: 0px !important;
    }
    .col-md-2 {
        text-align: left !important;
    }
</style>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h2>Budget</h2>
<hr />
@Html.ValidationSummary(true)

<label>Month </label>
<select id="month" name="month">
@{ string[] Months = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; }
@for (var i = 0; i < 12; i++)
{
var m = i + 1;
if (Convert.ToInt32(ViewBag.month) == m)
{
<option value=@m selected>@Months[i]</option>
}
else
{
<option value=@m>@Months[i]</option>
}
}
</select>
<label>YEAR</label>
<select id="year" name="year">
@for (var c = 0; c < 1000; c++)
{
var yr = c + 2017;
if (Convert.ToInt32(ViewBag.year) == yr)
{
<option value=@yr selected>
@yr
</option>
}
else
{
<option value=@yr> @yr</option>
}
}
</select>
<br />
<br />
<div class="form-group">
<label>&nbsp; &nbsp;LIST OF YOUR DEPARTMENT</label>
<span class="">@Html.DropDownList("DEPARTMENTID", (SelectList)ViewBag.DeptList, new { @class = "form-control" })</span>
</div>

 

<div class="form-group">
@Html.LabelFor(model => model.BUDGET, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextBox("ShowBudget", null, new { @class = "form-control" })
@Html.HiddenFor(model => model.BUDGET, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.BUDGET)
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
<br />
<br />
<br />
</div>
}

<div>
    @Html.ActionLink("Back to List", "Index", null, new { @class ="btn btn-primary"})
</div>
<script>
    $(document).ready(function () {

        $("#ShowBudget").change(function () {
            var value = parseFloat($(this).val());
            $("#BUDGET").val(value); //assign the current value to BUDGET field

            if (!isNaN(value)) {
                var result = value.toLocaleString(
                    "en-US", // use a string like 'en-US' to override browser locale
                    { minimumFractionDigits: 2 }
                );
                $(this).val(result);
            }
        })
    })
</script>
@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

型号

namespace WarehouseRtoRSystem.Models

{
public class BudgetModel
{
public int MONTH { get; set; }

public int YEAR { get; set; }  

public string DEPARTMENTID { get; set; }

public DateTime DATETIME { get; set; }

//[DisplayFormat(DataFormatString = "{0:N}", ApplyFormatInEditMode = true)]

public double BUDGET { get; set; }

public string GROUPID { get; set; }

}

public class BudgetViewModel : BudgetModel

{

public string DEPARTMENTNAME { get; set; }

public double EXPENCES { get; set; }

public double BALANCE { get; set; }

}

public class BudgetContext

{

private readonly OracleCommand cmd = new OracleCommand();

private OracleConnection Conn = new OracleConnection();

private readonly OracleConnModel ORCONN = new OracleConnModel();

public List<BudgetViewModel> List()

{

var Departments = new List<BudgetViewModel>();


///SQL QUERY

Conn = ORCONN.con;

if (Conn.State != ConnectionState.Open)

{

Conn.Open();

}

try

{

cmd.Connection = Conn;

cmd.CommandText = "SELECT * From PH.SYSTEMBUDGET";

cmd.CommandType = CommandType.Text;

var dr = cmd.ExecuteReader();

while (dr.Read())

{

var Dept = new BudgetViewModel();

Dept.MONTH = dr.GetInt32(0);

Dept.YEAR = dr.GetInt32(1);

Dept.DEPARTMENTID = dr.GetString(2);

Dept.DATETIME = dr.GetDateTime(3);

Dept.BUDGET = dr.GetDouble(4);

Dept.GROUPID = dr.IsDBNull(5) ? "" : dr.GetString(5);

Departments.Add(Dept);

}

}

finally

{

Conn.Close();

}

return Departments;

}


public string insert(BudgetModel model)

{

Conn = ORCONN.con;

if (Conn.State != ConnectionState.Open)

{

Conn.Open();

}

try

{

cmd.Connection = Conn;

//var date = new DateTime();

// date = DateTime.Now;

var query = "INSERT into PH.SYSTEMBUDGET(";

query += "MONTH,";

query += "YEAR,";

query += "DEPARTMENTID,";

query += "DATETIME,";

query += "BUDGET,";

query += "GROUPID";

query += ")";

query += "VALUES(";

query += "'" + model.MONTH + "',";

query += "'" + model.YEAR + "',";

query += "'" + model.DEPARTMENTID + "',";

query += "TO_DATE('" + DateTime.Now + "','MM/DD/YYYY HH:MI:SS AM'),";

query +=  "'"+ model.BUDGET + "'," ;

query += "'" + model.GROUPID + "'";

query += ")";

cmd.CommandText = query;

cmd.CommandType = CommandType.Text;

cmd.ExecuteNonQuery();

}

catch(Exception e)

{

Console.WriteLine("{0} Exception caught.", e);

}

finally

{

Conn.Close();

}

return "Seccessfully inserted";

}

}

}

【问题讨论】:

  • 您是否遇到任何错误?它会一直贯穿您的 httppost 创建吗?
  • 先生不会显示错误
  • 你能把代码贴在你的视图模型上吗?还有整个表单的 html/razor 代码,而不仅仅是下拉列表。
  • 您视图中的departmentID 字段不是下拉列表,而是一个文本框。您似乎已将部门列表添加到名为“groupID”的字段中。这是故意的吗?
  • 模型回传到服务器时是否包含 DepartmentID?代码在执行过程中是否抛出任何异常?如果是这样,有什么错误?还有你为什么要使用这样的字符串来构建查询?请学习使用 SQL 参数,否则您的代码 a) 很容易出现难以发现的语法错误,更糟糕的是,恶意用户可以轻松窃取、破坏或删除您的数据的 SQL 注入攻击。

标签: c# asp.net-mvc razor asp.net-core


【解决方案1】:

错误存在于控制器中的以下代码中,您将SelectListItemValue 设置为DEPTCODE 描述而不是DEPTCODE 记录的ID

这是您的代码:

var listSelectitem = usergroup.Select(@group => new SelectListItem
{
Selected = true,
Text = @group.DEPTCODE.Length > 20 ? @group.DEPTCODE.Substring(0, 20) : @group.DEPTCODE,
Value = @group.DEPTCODE
}).ToList();

问题就在这里:

Value = @group.DEPTCODE

现在很抱歉没有在控制器中完全重新创建代码,但 DEPTCODE 模型不可用,所以我稍微即兴创作。

这是我的创建控制器:

[HttpGet]
public ActionResult Create()
{
    List<DeptCode> _depts = new List<DeptCode>();
    _depts.Add(new DeptCode { Id = 0, Description = "IT"});
    _depts.Add(new DeptCode { Id = 1, Description = "Customer Services" });
    _depts.Add(new DeptCode { Id = 2, Description = "Warehouse" });


    var _listSelectItem = _depts.Select(@group => new SelectListItem
    {
        Selected = true,
        Text = @group.Description,
        Value = @group.Id.ToString()

    }).ToList();

    var firstOrDefault = _listSelectItem.FirstOrDefault();
    if(firstOrDefault != null)
    {
        ViewBag.DeptList = new SelectList(_listSelectItem, "Value", "Text", firstOrDefault.Text);
    }

    return View();
}

我用记录的IdValue 创建了我的SelectListItem,因为在您的代码中,您将ViewBag.DeptListSelectList 绑定,其中dataValueField (Source)属性是“价值”。

ViewBag.DeptList = new SelectList(_listSelectItem, "Value", "Text", firstOrDefault.Text);

所以在我的示例中,我选择了一个仓库部门(我再次为我的模型设定了这个值),然后按下创建。

如您所见,这现在绑定到model.DEPARTMENTID:

如果你想看看它是如何工作的,我已经在这里添加了我的代码:

https://github.com/garfbradaz/StackOverFlowAnswers/tree/master/ASP.NET%20MVC/DropDownListNotWorking/SOAnswer-44879268

【讨论】:

    猜你喜欢
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 2018-01-13
    • 2015-09-10
    • 1970-01-01
    相关资源
    最近更新 更多