使用out参数和通过引用错误

本文关键字:引用 错误 out 参数 使用 | 更新日期: 2023-09-27 18:22:04

我正在构建一个发送模拟文本消息的MVC应用程序,其中有两个模型:Contacts和Textmessages。

当用户创建Textmessage时,视图要求用户输入电话号码和消息。提交后,控制器会在允许创建消息之前验证数据库中是否存在电话号码(联系人)。

如果联系人存在,确认屏幕需要显示信息详细信息(电话号码和信息)以及收件人的姓名。

我正在使用out参数以字符串形式发回名称信息,但我收到了一个错误:

无法在控制器"SMSText.Controllers.TextmessagesController"上调用操作方法"System.Web.Mvc.ActionResult Create(SMSText.Models.Textmessage,System.String ByRef,System.String By Ref)",因为参数"System.String&"firstName"是通过引用传递的。

这是我正在使用的代码:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create( [Bind(Include = 
        "ID,Message,EnteredPrefix,EnteredPhoneNumber")] Textmessage textmessage, 
        out string firstName, out string surName )
    {
        firstName = "";
        surName = "";
        if (ModelState.IsValid)
        {
            bool exists = db.Contacts.AsEnumerable()
                .Where(contact => contact.AreaCode == textmessage.EnteredPrefix && contact.PhoneNumber == textmessage.EnteredPhoneNumber)
                .Count() >0;
            if (exists)
            {
                var contactObj = db.Contacts.First(contact => contact.AreaCode == textmessage.EnteredPrefix && contact.PhoneNumber == textmessage.EnteredPhoneNumber)
                firstName = contactObj.Forename;
                surName = contactObj.Surname;
                db.Textmessages.Add(textmessage);
                db.SaveChanges();
                return RedirectToAction("Details", textmessage );
            }
            else
            {
                return View("Error", textmessage);
            }
        }
        return View(textmessage);
    }

如果我理解错误消息,则名称信息将作为引用而不是实际字符串传递,但我不知道如何解决此问题。

我怎样才能克服这个错误?有没有更好的方法来完成我正在做的事情?

使用out参数和通过引用错误

您试图使用参数,似乎不必要地过度扼杀了调用。为什么不在找到匹配的联系人后简单地使用ViewData,然后在视图中使用呢?

var contact  = db.Contacts.AsEnumerable()
                .Where(contact => contact.AreaCode == textmessage.EnteredPrefix && contact.PhoneNumber == textmessage.EnteredPhoneNumber);
if(contact != null && contact.Any())
{
   ViewData["Contact"] = contact.FirstOrDefault();
   db.Textmessages.Add(textmessage);
   db.SaveChanges();
   return RedirectToAction("Details", textmessage );
}

and then in the view you can read it back:
@{
    var contact = (Contact)ViewData["Contact"];
}

请告诉我它是如何为你工作的。。。